Struts2在JSP页面中显示错误信息和提示信息的方法

Struts2在JSP页面中显示错误信息和提示信息的方法主要有以下四种。
注意:以下四种方法均需要使Action类继承ActionSupport类

一、域级错误信息

①重写Action中的validate()方法或编写validateXxx()方法,添加域级错误信息:

public void validate() {
	String account = loginUser.getAccount();
	String pwd = loginUser.getPassword();
	if (account == null || account.equals("")) {
		this.addFieldError("loginUser.account", "请输入您的用户名!");//添加域级错误信息
	}
	if (pwd == null || pwd.equals("")) {
		this.addFieldError("loginUser.password", "请输入您的密码!");//添加域级错误信息
	}
}

②在struts.xml中配置“input”的result:

<result name="input">/login.jsp</result>

数据校验出错时,返回login.jsp页面。

此时在JSP 页面中使用Struts2 标签生成的表单,校验出错时能将域级别的错误信息自动显示到表单元素处。如下图所示:
Struts2在JSP页面中显示错误信息和提示信息的方法
也可以在JSP页面中使用<s:fielderror/>集中显示域级错误信息。效果如下图所示:
Struts2在JSP页面中显示错误信息和提示信息的方法

二、Action级错误信息和提示信息

①在执行方法中添加Action级错误信息和提示信息:

public String login() {
	UserService userServ = new UserService();
	if (userServ.login(loginUser)) {
		this.addActionMessage("登录成功!");
		return "success";
	}
	else {
		this.addActionError("用户名或密码输入错误,请重新输入!");
		return "fail";
	}
}

②在JSP页面中使用<s:actionerror/>和<s:actionmessage/>标签输出错误信息和提示信息。

效果如下图所示:
Struts2在JSP页面中显示错误信息和提示信息的方法
Struts2在JSP页面中显示错误信息和提示信息的方法

三、校验器

创建校验规则文件,配置校验信息,一个可能的注册模块的校验规则文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.2//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
	<field name="loginUser.password">
		<field-validator type="fieldexpression">
			<param name="trim">true</param>
			<param name="expression">loginUser.password==loginUser.repassword</param>
			<message>两次密码输入不一致!</message>
		</field-validator>
	</field>
</validators>

效果如下图所示:
Struts2在JSP页面中显示错误信息和提示信息的方法
关于校验器的详细介绍见上一篇文章:struts2中请求参数的数据校验(校验器和手工编码)

四、struts2内置类型转换器

当输入的数据不合法时,内置类型转换器会自动给出提示。例如,日期类型的数据不合法:
Struts2在JSP页面中显示错误信息和提示信息的方法
如需修改默认的类型转换校验信息,则要在Action 类的包中声明名为“Action类名.properties”的局部属性文件。
以上例子,在UserAction类的包中创建名为“UserAction.properties”的局部属性文件,以键值对的形式对校验信息进行修改:

invalid.fieldvalue.loginUser.birthday=生日必须是日期,并符合“yyyy-mm-dd”格式

其中invalid.fieldvalue 不能随意修改,loginUser.birthday 是请求参数域名,应根据实际需要进行修改。
为避免乱码,还需对UserAction.properties文件进行转码。
转码后的UserAction.properties文件:

invalid.fieldvalue.loginUser.birthday=\u751f\u65e5\u5fc5\u987b\u662f\u65e5\u671f\uff0c\u5e76\u7b26\u5408\u201cyyyy-mm-dd\u201d\u683c\u5f0f

修改后的效果如下图所示:
Struts2在JSP页面中显示错误信息和提示信息的方法