【问题标题】:How to validate specific action using XML configuration in Struts 2如何在 Struts 2 中使用 XML 配置验证特定操作
【发布时间】:2014-06-16 10:27:33
【问题描述】:

我只想在动作类中验证特定方法。 动作方法是这个。

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 尚未成功。

【问题讨论】:

    标签: java validation struts2


    【解决方案1】:

    要从验证中排除某些方法,您可以覆盖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】:

      我遇到了类似的问题,但后来我纠正了这些问题:

      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>
      

      【讨论】:

      • 仍然没有验证方法
      【解决方案3】:

      使用动作别名:将动作的不同方法映射到 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,放在action类包里。在 struts.xml 中有什么可以启用验证的吗?

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

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

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

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

      【讨论】:

      • 你能告诉我把这个文件放在哪里吗? struts.xml 所在的相同位置(资源文件夹)?
      • 在您现有的 action-validation.xml 文件旁边(或代替)(即在您的 Action 类旁边)。由于验证文件必须与操作名称 you can map different "actions" each one to a method for the same Action class 匹配,因此您可以将它们与别名验证文件进行映射。
      • 不,它现在不是验证任何东西。 您不能将aoName地址字段留空。 名称为 OraganisationAction-add-validation.xml 并与动作类包放在一起。有什么可以在 struts.xml 中启用验证
      • @Dilis 你读过更新的答案吗?你有没有尝试过 ?成功了吗?
      • 没有。可能是我使用tiles和struts jquery插件提交表单
      猜你喜欢
      • 2014-04-25
      • 1970-01-01
      • 2013-07-23
      • 2014-08-19
      • 2013-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多