2017-06-22 28 views
1

我有一個表單,其中提供了與更新整個表單分開的註釋。Struts2通過一個動作和多個jsp頁面進行驗證

讓我的JSP管理我用下面的Struts 2的動作:

<action name="maininfo" class="MainInfo"> 
     <result name="success" type="tiles">maininfo</result> 
     <result name="addFundingComment" type="tiles">addFundingComment</result> 
     <result name="input" type="tiles">maininfo</result> 
    </action>  

maininfo平鋪顯示主窗體JSP頁面。 addFundingComment圖塊顯示提交評論的表單。

我的問題是,如果驗證失敗「輸入」的結果必須去無論是maininfotileaddFundingComment瓦,但我需要它去對應驗證失敗窗體的瓷磚。

我可以解決這個問題通過將在maininfo JSP代碼addFundingComment JSP代碼,並使用<s:if>顯示我想要的形式,但我認爲有兩個獨立的JSP文件,使每一個更易於管理和調試。

我想使用一個操作,以便在用戶提交評論時更容易保持所有的maininfo字段更改。

有沒有辦法讓action<results>轉到不同的JSP頁面並且驗證失敗返回到相應的JSP頁面?

+1

聽起來像是你混爲一談兩個不同的動作。最簡單的解決方法是在同一個動作中提交不同的方法。另一個微不足道的解決方案是包含一個標識表單的隱藏字段,或者根據表單數據存在的情況進行計算。 –

+0

我確實在動作中使用了不同的方法。當他們點擊「添加評論」時,我提交返回「addFundingComment」的方法,該方法顯示「addFundingComment.jsp」頁面。當他們點擊「提交評論」時,我提交將評論存儲在數據庫中的方法,並返回顯示「maininfo.jsp」頁面的「成功」。我同意我可以在「maininfo.jsp」中隱藏評論表單,但我試圖使用兩個較小的jsp文件而不是一個巨大的文件。 – ponder275

+2

我的意思是有兩個動作配置動作配置中指定的方法。然後你可以有單獨的「輸入」結果,並讓框架完成工作,而不必手動完成。 –

回答

1

您可以使用動態結果配置返回相應的視圖。動態屬性通過OGNL進行評估,因此您必須創建一個getter方法來返回input結果的位置。

<result name="input" type="tiles">${inputName}</result> 

在動作類

public String getInputName() { 
    String inputName = "maininfo"; 
    if (actionName.equals("addFundingComment") 
    inputName = "addFundingComment"; 
    return inputName; 
} 
相關問題