struts在頁面中使用form標記的注意事項

struts在頁面中使用form標記的注意事項
struts的form標記定義了一個頁面的表單,但該struts標記需要根據action的值來查找module config裏的action mapping,並根據action mapping的值來初始化action form。因此,在form標記中需要獲取一個module config。在這裏,獲取哪一個module config成爲了form標記能否正常工作的關鍵,如果module config的獲取值不正確,將會造成對應的action mapping找不到或者找到但卻不是正確的action mapping。從而造成Cannot retrieve mapping for {action name}的錯誤或者其他意外錯誤。在form標記的lookup方法中,包含了該查找module的過程,它的查找方法爲首先從request中獲取當前的module config,如果沒有找到,就從servlet context中獲取默認的module config(即module prefix爲""的module)。
我們分析ActionServlet的初始化方式,可以發現ActionServlet將初始化好的module config分別保存在servlet context的屬性中,其中的屬性名爲Globals.MODULE_KEY+prefix,但request對象的當前module config是怎麼來的呢。它是ActionServlet在獲取到一個請求後,根據請求的url與保存在servlet context裏的module prefix進行匹配,如果匹配成功,則將屬性名爲Globals.MODULE_KEY+"匹配成功的prefix"的module config作爲當前的module config返回,該過程出現在ActionServlet的process方法中,在select module的時候,將根據以上規則,選擇當前的module config,並保存在request的屬性Globals.MODULE_KEY。並將實例轉給RequestProcessor對象。
我們從上面的分析中可以看出,包含form tag的jsp頁面,如果要正確的將自已關聯到一個module中,則需要事先將當前module config對象放在request請求中,但存放module config到request請求的動作是在ActionServlet中完成的。因此,頁面只有在經過了對一個Acton進行處理後(在處理action的過程中,會根據action的url來匹配當前的module,並將其保存在request中),並通過redirect=false的方式下重定向到一個jsp頁面,才能使該jsp頁面正確的關聯到module中,否則都將關聯到默認的module config中,如直接在地址欄中鍵入jsp的url這種情況下,所有的jsp文件都關聯到默認的module config中。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章