2011-11-10 1 views
2

J'ai la classe a, CouponAction, avec deux méthodes, initCoupon et addCoupon. Je veux seulement la validation sur la méthode addCoupon, pas au niveau de la classe où il essaye de valider toutes les méthodes.Validation avec Struts 2 Extension de convetion au niveau de la méthode, pas au niveau de la classe

cette classe avec des méthodes ressemble à quelque chose comme ça

@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", [email protected]("jsonValidationWorkflowStack"), 
      results = { 

@Result(location = "/jsp/order/coupon/paymentCoupon.jsp", name = "success") 

}) 

public String addCoupon() { 

....... 

} 

Puis-je obtenir:

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 

Tous les exemples Iv vu utilise l'annotation de validation au niveau de la classe. Lorsque j'ai utilisé xml j'avais un fichier: CouponAction-addCoupon-validation.xml qui ne valide que la méthode addCoupon. Comment puis-je le faire fonctionner avec l'annotation de validation?

merci d'avance.

Sources:

http://struts.apache.org/2.1.6/docs/convention-plugin.html#ConventionPlugin-InterceptorRefannotation

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

Répondre

1

Ce que je suis conscient que lorsque plusieurs méthodes sont utilisées pour cartographier différentes actions sur la même classe, et l'un d'entre eux est annotés avec @Validations, les les validateurs seront déclenchés pour toutes les actions.

La solution semble utiliser annotée avec @SkipValidation ou validateAnnotatedMethodOnly est définie sur true dans l'intercepteur "validation".

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

se réfèrent le lien suivant

Struts2 Validation

bien même je ne l'ai pas travaillé avec ce cas en utilisant l'annotation afin espère que cela fonctionnera pour vous.

+0

parfait, merci, c'est la solution. –

+0

vous êtes les bienvenus :) –

1

Vous pouvez utiliser l'annotation @SkipValidation au niveau de la méthode pour ignorer la méthode initCoupons().

+0

oui, d'accord, merci –

Questions connexes