2013-08-02 34 views
1

我創建使用Struts 2的Web應用程序在一個JSP文件中,我創建了這樣一種形式:定義不同的驗證被稱爲在Struts2的行動

<s:form action="actionclassname!%{methodToCall}" method="post"> 
... 
</s:form> 

在動作類,我創建了兩個方法,將根據變量methodToCall的值調用。這很好。 我的問題是動作類的兩個方法需要一些驗證。所以我使用註釋來驗證表單,如果第一種方法被調用:

@Validations(....) 
public String actionMethod1(){ 
    ... 
} 

@Validations(...) 
public String actionMehod2(){ 
    ... 
} 

第一種方法適用於驗證。我的問題在於第二種方法。這似乎是當我爲第二種方法定義驗證(也使用註釋)時,我在第一種方法上定義的驗證再次在我爲第二種方法定義的驗證之前執行。

如何在JSP中調用此方法時運行第二種方法進行驗證?

+1

使用參數validateAnnotatedMethodOnly進行驗證攔截,等你下定決心使用註釋?我不確定這是否得到真正的支持,但我也傾向於不使用註釋這樣的東西來保持我的課程儘可能中立。 –

+0

是的,我想繼續使用註釋。 –

回答

0

在通過註釋的操作配置,你應該在這個例子中

@Action(value="actionclassname", results = { 
    @Result(name="input", location = "/actionclassname.jsp") 
},interceptorRefs = @InterceptorRef(value="defaultStack", params = {"validation.validateAnnotatedMethodOnly", "true"})) 
+0

我嘗試了你的建議,但沒有奏效。我沒有使用defaultStack。相反,我使用了我創建的那個。結果有關係嗎?即使使用defaultStack,它也不起作用。驗證總是堆疊起來。任何其他建議? –

+1

@PatrickB。如果您沒有發佈代碼,我怎麼知道您使用了哪個堆棧?並在方法上添加註釋,用於映射您的操作。 –

+0

我不是在指責你使用哪個堆棧。我將註釋放在用於映射我的動作的方法上。它沒有工作。 –