Struts 2验证xml中的特定操作

时间:2014-06-16 10:27:33

标签: java validation struts2

我想仅在动作类中验证特定方法。 行动方法就是这样。

public String add() throws Exception {

// aflag = true;

org.setAoName(aoName);
orgBo.addOrg(org);
orglist = orgBo.searchOrg(organisationSearch);
setAoName("");
setAflag("viewaddorgs");

return "add";
}

问题是目前我在动作类中有很多动作方法。当我调用这些方法时,它会验证此方法。请帮我用xml验证这个方法。

这是我的OraganisationAction-validation.xml

    <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator 1.0.3//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

<validators>

    <field name="aoName">
        <field-validator type="requiredstring">
            <message>
                The name is required!
            </message>
        </field-validator>

        <field-validator type="requiredfield">
            <message>
                The name is required!
            </message>
        </field-validator>
    </field>


</validators>

这是我的jsp:

    <s:form id="post" action="addorgs" validate="true" >

    <s:textfield name="aoName" label="Add Organisations"  />

</s:form>

struts xml

<package name="default" extends="struts-default">


        <result-types>
            <result-type name="tiles"
                class="org.apache.struts2.views.tiles.TilesResult" />
        </result-types>

        <action name="*security" class="com.ast.action.admin.SecurityAction"
            method="{1}">
            <result name="second" type="tiles">secondTemplate</result>
            <result name="pass" type="tiles">orgTemplate</result>
        </action>


        <action name="*orgs" class="com.ast.action.admin.OraganisationAction"
            method="{1}">

            <result name="viewadd" type="tiles">orgAddTemplate</result>
            <result name="input" type="tiles">orgAddTemplate</result>
            <result name="add" type="tiles">orgAddTemplate</result>
            <result name="addtbl" type="tiles">orgAddTemplate</result>
            <result name="search" type="tiles">orgTemplate</result>
            <result name="delete" type="tiles">orgTemplate</result>
            <result name="viewedit" type="tiles">orgEditTemplate</result>
            <result name="edit" type="tiles">orgEditTemplate</result>
            <result name="edittbl" type="tiles">orgEditTemplate</result>
            <result name="orgmenu" type="tiles">orgTemplate</result>
            <result name="view" type="tiles">orgViewTemplate</result>
        </action>

它适用于注释,但xml尚未成功。

3 个答案:

答案 0 :(得分:0)

使用操作别名:将不同的Action方法映射到struts.xml中的不同操作别名,而不是单个yourAction-validation.xml文件,为要执行的验证程序添加yourAction-yourAlias-validation.xml那种方法。

Read more here

修改

  

现在没有任何验证。

     
<validators> 
    <field name="aoName">
        <field-validator type="required"> 
            <message>You cannot leave the aoName address field empty.</message>
        </field-validator> 
    </field>
</validators>
     

名称为OraganisationAction-add-validation.xml,并将其与动作类包放在一起。有没有什么可以在struts.xml中启用验证?

如果您已正确配置(例如默认值)拦截器堆栈,则已启用验证。如果您使用名为OraganisationAction-add-validation.xml的文件,则表示:

  • 您的行动CLASS必须命名为OraganisationAction.java;
  • 您在struts.xml中的操作映射必须如下:

    <action name="add" class="your.package.OraganisationAction" method="add">
        <result>yourResult.jsp</result>
    </action>
    

查找拼写错误,检查拦截器堆栈,它会自动运行。

答案 1 :(得分:0)

要从验证中排除某些方法,您可以覆盖validation拦截器的参数。例如,在拦截器堆栈中,您可以编写

<interceptor-ref name="validation">
  <param name="excludeMethods">input,back,cancel,browse,yourmethod</param>
</interceptor-ref>

在动作配置中,您可以使用上面的代码和

<interceptor-ref name="defaultStack">
  <param name="validation.excludeMethods">input,back,cancel,browse,yourmethod</param>
</interceptor-ref>

注意yourmethod是方法名称。

您可以通过此文件中的操作名称后缀仅为一个操作指定validation.xml。例如,AcrionClass-add-validation.xml仅适用于操作配置中的操作名称add。请注意,此处add是操作名称,而不是方法名称。

  

通常,name属性与方法名称匹配,但它们也可能不同。

答案 2 :(得分:0)

我遇到了类似的问题,但后来我纠正了几件事情:

1)yourAction-yourAlias-validation.xml中的DOCTYPE应为

    <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
    "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

2)创建了一个自定义拦截器来排除不需要验证的方法。下面是我的候选人注册的样本,我必须跳过区域方法的验证,该方法为一个州获取区域。

 <interceptor-stack name="clientValidation">
  <interceptor-ref name="basicStack"/>
   <interceptor-ref name="validation">
     <param name="excludeMethods">input,district</param>
    </interceptor-ref>
  <interceptor-ref name="workflow"/>
</interceptor-stack>


<package name="registration" namespace="/candidate" extends="struts-default">
            <action name="candidateRegistration" class="com.app.action.CandidateAction">
            <interceptor-ref name="clientValidation"/>
                <result name="input">/jsps/student/studentregistration.jsp</result>
                <result name="failure1">/jsps/student/registrationfailure.jsp</result>
                <result name="cancelRegistration">/jsps/login.jsp</result>
                <result name="district">/jsps/includes/dropdown_districts_regoffice.jsp</result>
            </action>
        </package>