问题描述
page:<@s.submit value="保存为草稿" method="saveDraftOrder" cssClass="btn_w65px"/><@s.submit value="提交" method="saveFormalOrder" cssClass="btn_w65px"/>xml:<!-- 保存正式订单信息 --><action name="saveOrder" class="com.sale.productorder.control.action.ProductOrderAction" method="saveFormalOrder"><!-- 修改草稿订单信息 --><action name="updateDraftOrderInfo" class="com.sale.productorder.control.action.ProductOrderAction"method="saveFormalOrder"><!-- 基本的配置没问题--> <interceptor-stack name="DefaultStack"> <interceptor-ref name="emptyParams"/> <interceptor-ref name="i18nStack"/> <interceptor-ref name="validation"/> <interceptor-ref name="workflow"/> <interceptor-ref name="initUser"/> </interceptor-stack>validation-name: ProductOrderAction-saveDraftOrder-validation.xmlProductOrderAction-saveFormalOrder-validation.xmlClassName:ProductOrderAction.java我要验证 ProductOrderAction 的 saveDraftOrder && saveFormalOrder 方法配置文件不起作用。自己search 了一下 官网上这样说 貌似对我这个没什么用。。。 1. To use a postfix wildcard, just move the asterisk and add an underscore. 2. 3. <action name="Crud_*" class="example.Crud" method="{1}"> 4. From the framework's perspective, a wildcard mapping creates a new "virtual" mapping with all the same 5. attributes as a conventional, static mapping. As a result, you can use the expanded wildcard name as the name 6. of validation, type conversion, and message resource files, just as if it were an Action name (which it is!). 7. 8. Crud_input-validation.xml 9. Crud_delete-conversion.xml :oops: 。请各位赐教下。。感激万分!怎么没人理。。。。问题补充:配置没有问题,action 里的方法可以运行只是 验证规则没有执行我估计是提交方式 的问题ps:我是用相同的action name 但是method 不同
解决方案
说句题外话,你的配置里面错误还挺多。再帮你改一下<!-- 保存正式订单信息 --> <action name="saveOrder" class="com.sale.productorder.control.action.ProductOrderAction" method="saveFormalOrder"> <!-- 修改草稿订单信息 --> <action name="updateDraftOrderInfo" class="com.sale.productorder.control.action.ProductOrderAction"method="saveDraftOrder"> ProductOrderAction-saveOrder-validation.xml ProductOrderAction-updateDraftOrderInfo-validation.xml <@s.submit value="保存为草稿" action="saveOrder" cssClass="btn_w65px"/> <@s.submit value="提交" action="updateDraftOrderInfo" cssClass="btn_w65px"/>
解决方案二:
引用自己search 了一下 官网上这样说 貌似对我这个没什么用。。。 1. To use a postfix wildcard, just move the asterisk and add an underscore. 2. 3. <action name="Crud_*" class="example.Crud" method="{1}"> 4. From the framework's perspective, a wildcard mapping creates a new "virtual" mapping with all the same 5. attributes as a conventional, static mapping. As a result, you can use the expanded wildcard name as the name 6. of validation, type conversion, and message resource files, just as if it were an Action name (which it is!). 7. 8. Crud_input-validation.xml 9. Crud_delete-conversion.xml 看来你还是不明白,详细的解释一下:对于这个action配置:<action name="Crud_*" class="example.Crud" method="{1}"> 如果action类里面有一个input方法,那么就有了一个名字叫Crud_input的action.配置这个action的校验的xml文件名就叫做:Crud_input-validation.xml然后画面请求Crud_input的时候,就调用Crud_input-validation.xml来进行验证。这个就是struts2的校验配置文件的命名规则。按照action的方法名来配置是没有用的。你用了这样的定义方式。引用<!-- 保存正式订单信息 --> <action name="saveOrder" class="com.sale.productorder.control.action.ProductOrderAction" method="saveFormalOrder"> <!-- 修改草稿订单信息 --> <action name="updateDraftOrderInfo" class="com.sale.productorder.control.action.ProductOrderAction"method="saveFormalOrder"> 就产生了saveOrder和updateDraftOrderInfo两个Action,虽然对应的是同一个方法,但是配置校验文件的只要配置actionName对应的校验文件,引用ProductOrderAction-saveOrder-validation.xml ProductOrderAction-updateDraftOrderInfo-validation.xml 就可以进行不同的验证。然后具体到你这儿页面上面使用的时候,直接在调用action的submit按钮里面定义action属性就可以了,不用method属性。<@s.submit value="保存为草稿" action="saveOrder" cssClass="btn_w65px"/> <@s.submit value="提交" action="updateDraftOrderInfo" cssClass="btn_w65px"/>
解决方案三:
你的校验配置文件ProductOrderAction-saveDraftOrder-validation.xml的命名有问题。按照我上面说的改就可以了。
解决方案四:
漏了一个 <action name="updateDraftOrderInfo" class="com.sale.productorder.control.action.ProductOrderAction"method="saveFormalOrder">
解决方案五:
validation-name: ProductOrderAction-saveDraftOrder-validation.xml ProductOrderAction-saveFormalOrder-validation.xml 红色标记的地方是下面定义的名字才对(用红色标记出来了)<action name="saveOrder" class="com.sale.productorder.control.action.ProductOrderAction" method="saveFormalOrder">
解决方案六:
page:<@s.submit value="保存为草稿" method="saveDraftOrder" cssClass="btn_w65px"/><@s.submit value="提交" method="saveFormalOrder" cssClass="btn_w65px"/>xml:<!-- 保存正式订单信息 --><action name="saveOrder" class="com.sale.productorder.control.action.ProductOrderAction" method="saveFormalOrder"><!-- 修改草稿订单信息 --><action name="updateDraftOrderInfo" class="com.sale.productorder.control.action.ProductOrderAction"method="saveFormalOrder"> 仔细看一下你的action是不是配置错误了?以下两行<@s.submit value="保存为草稿" method="saveDraftOrder" cssClass="btn_w65px"/><@s.submit value="提交" method="saveFormalOrder" cssClass="btn_w65px"/>好像和action中的name属性名字不匹配哦,而且两个action中的method都是同名的。method="saveFormalOrder"是不是我问题理解错误了?