在网页中的资源信息过于丰富,如果用户在填写表单时不按照要求的数据类型输入,就会导致页面异常。如:年龄输入框只能输入整数,而用户输入了字母,页面就应该提示出数据类型不符合。struts2提供了自带的异常处理。
示例:
注册页面:index.jsp:
<h2>测试struts2添加单个信息</h2>
<s:form action="UserExceptionAction!test.action" method="post">
<s:textfield name="userinfo.uname" label="姓名"></s:textfield>
<s:textfield name="userinfo.age" label="年龄"></s:textfield>
<s:password name="userinfo.upass" label="密码"></s:password>
<s:textfield name="userinfo.birthday" id="txtBeginDate" label="生日"></s:textfield>
<s:submit value="注册"></s:submit>
</s:form>
action类:UserExceptionAction.java:
package com.web.action;
import com.opensymphony.xwork2.ActionSupport;
import com.web.entity.User;
@SuppressWarnings("serial")
public class UserExceptionAction extends ActionSupport {
private User userinfo;
public User getUserinfo() {
return userinfo;
}
public void setUserinfo(User userinfo) {
this.userinfo = userinfo;
}
public String test() {
return SUCCESS;
}
}
实体类:User.java:
package com.web.entity;
import java.util.Date;
public class User {
private String uname;
private String upass;
private int age;
private Date birthday;
// set,get方法省略......
}
异常配置文件:UserExceptionAction.properties:
invalid.fieldvalue.userinfo.age=\u7528\u6237\u5E74\u9F84\u5FC5\u987B\u662F\u6574\u6570
成功界面:succes.jsp:
<body>
<h2>添加单个信息</h2>
姓名:<s:property value="userinfo.uname"/><br>
密码:<s:property value="userinfo.upass"/><br>
年龄:<s:property value="userinfo.age"/><br>
生日:<s:date name="userinfo.birthday" format="yyyy年MM月dd日"/><br>
</body>
struts.xml:
<struts>
<constant name="struts.devMode" value="true"></constant>
<!-- 配置包元素 -->
<package name="default" extends="struts-default" namespace="/">
<action name="UserExceptionAction" class="com.web.action.UserExceptionAction">
<result name="success">/success.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package>
</struts>
注意:
异常配置文件:UserExceptionAction.properties的名称必须和action类的名称一致并且在一个包下面;
invalid.fieldvalue.userinfo.age中的userinfo是action里面的属性名称,age是实体类里面的属性名称。
测试效果: