我有一个类CouponAction,有两个方法,initCoupon和addCoupon。我只想在addCoupon方法上进行验证,而不是在尝试验证所有方法的类级别上进行验证。
这个带有方法的类看起来像这样
@Scope("prototype") @Controller
@Namespace("/coupon")
public class CouponAction extends BaseAjaxAction<Coupon> {
............
@Action(value = "initPaymentCoupons", results = {
@Result(location = "/jsp/order/coupon/paymentCoupon.jsp", name = "success")
})
public String initCoupons(){
........
}
@Validations(requiredFields = {
@RequiredFieldValidator(fieldName = "couponCode", type = ValidatorType.FIELD, message = "Enter a coupon code")
})
@Action(value = "/addCoupon", interceptorRefs=@InterceptorRef("jsonValidationWorkflowStack"),
results = {
@Result(location = "/jsp/order/coupon/paymentCoupon.jsp", name = "success")
})
public String addCoupon() {
.......
}
然后我得到:
2011-11-10 00:44:13,567 ERROR org.apache.struts2.components.ActionComponent.error:38 - Could not execute action: /coupon/initCoupons
No result defined for action vervik.actions.order.CouponAction and result input
我见过的所有示例都在类级别上使用验证注释。 当我使用xml时,我有一个文件: CouponAction-addCoupon-validation.xml中 只验证addCoupon方法。
如何使其与验证注释一起使用?
来源:
http://struts.apache.org/2.1.6/docs/convention-plugin.html#ConventionPlugin-InterceptorRefannotation
答案 0 :(得分:1)
我所知道的是,当使用多个方法在同一个类上映射不同的操作,并且其中一个用@Validations
注释时,将针对所有操作触发这些验证器。
解决方案似乎使用带注释@SkipValidation
或validateAnnotatedMethodOnly
在“验证”拦截器中设置为true。
<interceptor-ref name="validation">
<param name="validateAnnotatedMethodOnly">true</param>
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
参考以下链接
虽然即使我没有使用注释这样的情况,所以希望这对你有用。
答案 1 :(得分:1)
您可以在方法级别使用@SkipValidation
注释来绕过initCoupons()方法。