Struts2表单验证提交报错
填个小坑花了这么长时间真的好吗
将要提交的表单edit.jsp:
<%@ taglib prefix="s" uri="/struts-tags" %>
<%--
Created by IntelliJ IDEA.
User: joey
Date: 18-1-18
Time: 下午7:27
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Struts2 Form Tags - Edit Person</title>
<link type="text/css" rel="stylesheet" href="../css/default.css">
</head>
<body>
<h3>Update Information</h3>
<p>Use the form below to edit your information</p>
<s:form action="save" method="POST">
<s:textfield key="personBean.firstName"/>
<s:textfield key="personBean.lastName"/>
<s:textfield key="personBean.email"/>
<s:textfield key="personBean.phoneNumber"/>
<s:select key="personBean.sport" list="sports"/>
<s:radio key="personBean.gender" list="genders"/>
<s:select key="personBean.residency" list="states" listKey="stateAddr" listValue="stateName"/>
<s:checkbox key="personBean.over21"/>
<s:checkboxlist key="personBean.carModels" list="carModelsAvailable"/>
<s:submit key="submit"/>
</s:form>
</body>
</html>
struts.xml:
<action name="save" class="org.apache.struts.edit.action.EditAction" method="execute"> <result name="success">/form-tags/thankyou.jsp</result> </action>
后台处理方法:
public String execute() { editService.savePerson(getPersonBean()); return SUCCESS; }
表单配置文件EditAction.properties:
personBean.firstName=First Name personBean.lastName=Last Name personBean.email=Email Address personBean.phoneNumber=Phone Number (999-999-999) personBean.sport=Favorite sport personBean.gender=Gender personBean.residency=State resident personBean.over21=21 or older personBean.carModels=Car models owned submit=Save Changes
表单验证配置文件EditAction-validation.xml:
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators> <validator type="requiredstring"> <param name="fieldName">personBean.firstName</param> <message>First name is required.</message> </validator> <validator type="requiredstring"> <param name="fieldName">personBean.lastName</param> <message>Last name is required.</message> </validator> <validator type="requiredstring"> <param name="fieldName">personBean.email</param> <message>Email address is required.</message> </validator> <validator type="email"> <param name="fieldName">personBean.email</param> <message>Email address not valid.</message> </validator> <validator type="requiredstring"> <param name="fieldName">personBean.phoneNumber</param> <message>Phone number is required.</message> </validator> <validator type="regex"> <param name="fieldName">personBean.phoneNumber</param> <param name="regex"><![CDATA[\d{3}-\d{3}-\d{4}]]></param> <message>Phone number must be entered as 999-999-9999.</message> </validator> <validator type="fieldexpression"> <param name="fieldName">personBean.carModels</param> <param name="expression"><![CDATA[personBean.carModels.length > 0]]></param> <message>You must select at least one car model.</message> </validator> </validators>
访问页面:
填写符合验证条件的信息并不会出现异常,但是不符合条件的信息提交后报错:
其实很容易看出来,在struts.xml 配置中应该加个 result 标签,因为验证表单未通过时struts2会自动跳跳转到 input 这个 result 中,我们需要为 save.action 再指定一个
<result name="input">/form-tags/edit.jsp</result>
此时页面已经可以正常提交并处理。OK