使用Struts 2 Convention插件验证方法级别,而不是类级别

时间:2011-11-10 01:09:31

标签: validation struts2

我有一个类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

http://struts.apache.org/2.0.14/docs/annotations.html

2 个答案:

答案 0 :(得分:1)

我所知道的是,当使用多个方法在同一个类上映射不同的操作,并且其中一个用@Validations注释时,将针对所有操作触发这些验证器。

解决方案似乎使用带注释@SkipValidationvalidateAnnotatedMethodOnly在“验证”拦截器中设置为true。

<interceptor-ref name="validation">
    <param name="validateAnnotatedMethodOnly">true</param>
    <param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>

参考以下链接

Struts2 Validation

虽然即使我没有使用注释这样的情况,所以希望这对你有用。

答案 1 :(得分:1)

您可以在方法级别使用@SkipValidation注释来绕过initCoupons()方法。