[英]How do I avoid “chain” in this situation in Struts2?
我有一個名為ShowData
的Action,可以從數據庫中恢復數據並將其放入jsp中。
在struts.xml
...
<action name="ShowData" class="foo">
<result>foo.jsp</result>
</action>
...
在foo.jsp頁面中,我有一個表單和我使用ShowData
操作獲得的數據。
foo.jsp
...
<s:form action="DoSomething">
<s:input key="email" />
<s:submit/>
</s:form>
<s:iterator value="data_recovered_in_ShowData">
...
</s:iterator>
...
現在我想為數據添加一些驗證。 如果DoSomething
的返回類型是這樣的: <result name="input">foo.jsp</result>
我將丟失我在ShowData
操作中恢復的數據,但驗證工作正常並且用戶的先前輸入並且錯誤將在jsp頁面中顯示。
另一方面,我知道我可以使用chain
,做一些類似<result name="input" type="chain">ShowData</result>
然后使用MessageStoreInterceptor來恢復數據(但我仍然沒有知道如何恢復用戶在輸入中引入的先前數據。 但這是我試圖避免的解決方案,因為我讀到使用鏈不是一個好主意。
那么,在這種情況下如何在不丟失任何數據且不使用鏈的情況下添加一些驗證?
您可以選擇針對您從之前的具有相同名稱的操作中恢復的每個數據聲明隱藏變量。 第二個選項如果你想使用Chain,那么你可以在struts.xml文件中使用重定向並通過struts.xml本身發送恢復的數據,例如:
<action name="ShowData" class="foo">
<result>foo.jsp</result>
<result name="redirect" type="redirect">
<![CDATA[paxAcctCharge.do?value1=${value1}&value2=${value2}]]>
</result>
</action>
希望這會有所幫助。
如果您只關心在第一個操作中檢索數據庫數據,那么您有幾個選擇。
Preparable
並讓兩個操作使用適當的服務檢索數據。 prepare
方法。 如果您關心的是以前的表格數據(問題中沒有說明),那么您有類似的選擇:
對於這兩種情況,可能還有其他一些選擇。
最終,如果您僅使用鏈進行數據檢索,那么這是一個壞主意 - 這正是Preparable
的用途,並消除了操作之間的耦合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.