利用struts2实现中文验证并对错误消息的抽离。
详细需求:用户登录--》不填写用户名--》页面跳转到用户登录页面,提示用户名必填(以英文和中文两种方式提示)--》填写英文用户名--》页面提示用户名必须填写为英文---》填写中文用户名---》页面跳转到登录成功页面。
二、效果图
1、英文提示
2、中文提示
三、代码分析
result.jsp
复制代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
复制代码
result_success.jsp
复制代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
恭喜,登录成功!
用户名:
复制代码
ResultAction.java
复制代码
package result;
import com.opensymphony.xwork2.ActionSupport;
public class ResultAction extends ActionSupport {
private static final long serialVersionUID = 7340087601249007671L;
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public void validate() {
if (username != null && username.trim().length() > 0) {
if (username.matches("[\u4e00-\ufa29]+")) {
} else {
// this.addFieldError("username", "用户名必须为中文");
this.addFieldError("username", this.getText("result.username.mustchinese"));
}
} else {
this.addFieldError("username", this.getText("result.username.required"));
// this.addFieldError("username", "用户名必填!");
}
}
public String execute() throws Exception {
return SUCCESS;
}
}
复制代码
struts.xml
复制代码
< xml version="1.0" encoding="UTF-8" >
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
复制代码
result_struts.xml
复制代码
< xml version="1.0" encoding="UTF-8" >
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
/WEB-INF/result_success.jsp
result.jsp
复制代码
message_zh_CN.properties
复制代码
login.username=\u7528\u6237\u540D
login.submit=\u767B\u5F55
login.hello=\u4F60\u597D{0},\u6211\u662F{1}
login.tom=\u6C64\u59C6
login.amos=\u963F\u83AB\u65AF
result.username.required=\u7528\u6237\u540D\u5FC5\u586B
result.username.mustchinese=\u5FC5\u987B\u4E3A\u4E2D\u6587
复制代码
message_en_US.properties
复制代码
login.username=USERNAME
login.submit=LOGIN
login.hello=hello {0},I am {1}
login.tom=TOM
login.amos=AMOS
result.username.required=username cannot be empty
result.username.mustchinese=username must be chinese
复制代码
首先,项目运行时,通过struts.xml将配置文件加载到内存中,其中strutx.xml加载了result_struts.xml,message_zh_CN.properties,message_en_US.properties三个配置文件。
两个properties文件分别对应的是中英文提示信息,这里在项目启动时已经加载到内存中去了。
其次,result.jsp页面是程序入口==>调用了ResultAction==>ResultAction是在result_struts.xml中配置的ResultAction.java中的execute方法==>
调用validate()验证方法==>validate()验证方法主要作用是对username进行验证,必须是非空和中文,否则会使用getText()方法调用properties中配置的提示信息,将错误提示信息添加