如何在单个表单中具有多个提交按钮时在副操作类中执行验证

时间:2014-02-05 12:06:22

标签: struts2

我最初有两个领域&验证成功后提交更多文件与提交我必须验证服务器端的这些字段    所以我第一次使用validate()第一次提交第二次我想做服务器端验证。我必须单一行动吗?

 <s:form action="some.action" method="post" theme="simple" name="someForm" >
 <td ><s:label value="StdNumber:" /></td>
<td ><s:textfield   name="StdNum"  theme="simple"  /></td>
<td ><s:label value="Date of Birth:"/></td>
<td ><s:textfield  size="10" name="dateOfBirth" id="dateOfBirth" onclick="displayCalendar(document.forms[0].dateOfBirth,'ddd-MM-yyyy',this)" />
<s:submit cssClass="button" value="Submit"  name ="submitbtn" id="submitbtn" method="getEduInfo"  /></td>
<s:if test="sucess">
<td ><s:textfield   name="Stdname"  theme="simple"  /></td>
<td ><s:label value="marks:"/></td>
<td ><s:textfield  size="10" name="marks"  /></td>
<s:submit method="getPersonalInfo" value="submit"/>
 </s:if>
</s:form>

2 个答案:

答案 0 :(得分:2)

要以不同方式验证字段,您应该获取按钮的名称。

validate()中你必须写为:

if(buttonName.equals(yourFirstButtonName)) { 

     /* validation code for first two fields*/ 

} else if(buttonName.equals(yourSecondButtonName)) { 

     /* validation code for second two fields */

}

您可以通过向name提供s:submit tag属性来获取按钮名称,并将getterssetters写入该名称。

答案 1 :(得分:0)

您可以使用annotated validations。 如果我们假设你的动作类中有2个方法: 1)public String getEduInfo() {...}

2)public String getPersonalInfo() {...}

只需为每个注释使用@Validations注释,并在那里放置适当的验证。

请务必在validateAnnotatedMethodOnly上为true拦截器设置validation参数:

<interceptor-ref name="validation">
      <param name="validateAnnotatedMethodOnly">true</param>
</interceptor>

多亏了这一点,你可以为不同的方法调用不同的验证。