如何在 Struts 2 中使用 XML 配置验证特定操作

问题描述 投票:0回答:3

我只想在操作类中验证特定方法。

Action
方法是这个

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 xml-configuration
3个回答
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
是动作名称,而不是方法名称。

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


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>

0
投票

使用操作别名:将 Action 的不同方法映射到 struts.xml 中的不同操作别名,而不是单个

yourAction-validation.xml
文件,为您只想为该方法执行的验证器添加
yourAction-yourAlias-validation.xml

在此处阅读更多内容

编辑

不,现在没有验证任何内容。

<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>
    

查找拼写错误,检查你的拦截器堆栈,它会自动工作。

© www.soinside.com 2019 - 2024. All rights reserved.