我只想在操作类中验证特定方法。
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 还没有成功。
要从验证中排除某些方法,您可以覆盖
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
是动作名称,而不是方法名称。
名称属性通常与方法名称匹配,但它们也可能不同。
我也遇到了类似的问题,但我纠正了以下几件事:
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>
使用操作别名:将 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>
名称为
,放在action类包中。 struts.xml 中有什么可以启用验证吗?OraganisationAction-add-validation.xml
如果您有正确配置的(例如默认的)拦截器堆栈,则验证已启用。如果您使用名为
OraganisationAction-add-validation.xml
的文件,则意味着:
OraganisationAction.java
;struts.xml 中的操作映射必须如下:
<action name="add" class="your.package.OraganisationAction" method="add">
<result>yourResult.jsp</result>
</action>
查找拼写错误,检查你的拦截器堆栈,它会自动工作。