筆者近期正在使用Struts2開發(fā),在這里把個(gè)人心得小結(jié)一下。
1.重復(fù)提交問題。
使用<s:token />標(biāo)簽。但這并不足夠。當(dāng)一個(gè)submit需要花費(fèi)大量時(shí)間的時(shí)候(例如CRUD),頁面會(huì)暫時(shí)無法轉(zhuǎn)向,這時(shí)如果狂點(diǎn)按鈕的話仍然可以進(jìn)行重復(fù)提交。
所以正確的作法應(yīng)該是前后臺(tái)都要有所控制:
• 使用<s:token />
• 使用js控制:<form onsubmit="this.submit.disabled='true';">
2.在web page中使用for循環(huán)的問題。
PS:其實(shí),在視圖層應(yīng)盡量避免使用循環(huán)等復(fù)雜邏輯,最好在后臺(tái)封裝好了拿上來直接顯示。
3. 數(shù)據(jù)的頁面顯示問題。
為保持用戶的輸入與頁面顯示的一致,可能要對(duì)空格等做特殊處理:
4.自定義interceptor的問題。
Struts2默認(rèn)每個(gè)Action都會(huì)自動(dòng)調(diào)用defaultStack interceptor(def in struts-default.xml)。但如果你自定義了interceptor,defaultStack將不再被自動(dòng)調(diào)用。
想和頁面做交互的話最好還是加上它:
好了,就先到這里了。以后有新的話再補(bǔ)充:>
1.重復(fù)提交問題。
使用<s:token />標(biāo)簽。但這并不足夠。當(dāng)一個(gè)submit需要花費(fèi)大量時(shí)間的時(shí)候(例如CRUD),頁面會(huì)暫時(shí)無法轉(zhuǎn)向,這時(shí)如果狂點(diǎn)按鈕的話仍然可以進(jìn)行重復(fù)提交。
所以正確的作法應(yīng)該是前后臺(tái)都要有所控制:
• 使用<s:token />
• 使用js控制:<form onsubmit="this.submit.disabled='true';">
2.在web page中使用for循環(huán)的問題。
<s:bean name="org.apache.struts2.util.Counter">
<s:param name="last" value="***" />
<s:iterator>
do sth..
</s:iterator>
</s:bean>
這是一個(gè)很好用的bean,但要注意的是參數(shù)last一定要傳對(duì)。如果設(shè)錯(cuò)了的話(比如空值),等待你的將是一個(gè)死循環(huán)..<s:param name="last" value="***" />
<s:iterator>
do sth..
</s:iterator>
</s:bean>
PS:其實(shí),在視圖層應(yīng)盡量避免使用循環(huán)等復(fù)雜邏輯,最好在后臺(tái)封裝好了拿上來直接顯示。
3. 數(shù)據(jù)的頁面顯示問題。
為保持用戶的輸入與頁面顯示的一致,可能要對(duì)空格等做特殊處理:
str = str.replaceAll(" "," ");
然后使用標(biāo)簽(注意escape):<s:property value="***" escape="false" />
還有一種方法就是后臺(tái)不做任何轉(zhuǎn)換,把原始數(shù)據(jù)附給js在前臺(tái)轉(zhuǎn)換。具體哪種方法好就要細(xì)細(xì)權(quán)衡了。4.自定義interceptor的問題。
Struts2默認(rèn)每個(gè)Action都會(huì)自動(dòng)調(diào)用defaultStack interceptor(def in struts-default.xml)。但如果你自定義了interceptor,defaultStack將不再被自動(dòng)調(diào)用。
想和頁面做交互的話最好還是加上它:
<interceptor-stack name="Test_InterceptorStack">
<interceptor-ref name="Test_Interceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
<interceptor-ref name="Test_Interceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
好了,就先到這里了。以后有新的話再補(bǔ)充:>