無為則可為,無為則至深!
接看,在同上的包中加入ProductConfirm-conversion.properties,代碼如下:
再在struts.xml文件中配置ProductConfirm Action,代碼片段如下:
在WEB文件夾下新建AddProducts.jsp,內容如下:
在同樣的文件夾下創建ShowProducts.jsp,內容如下:
發布運行應用程序,在瀏覽器中鍵入http://localhost:8080/Struts2_Converter/AddProducts.jsp,出現如圖4所示頁面:圖4 添加產品頁面
按圖4所示,填寫表單,按“Submit”提交,出現圖5所示頁面:圖5 查看產品頁面
查看服務器的控制臺,有如下輸出:
上面的代碼并不復雜,但有幾點需要說明:
不知道大家在運行上面的例子時,有沒有填錯日期或數字情況,又或者您有沒有思考過這種情況?如果還沒有嘗試的朋友可以試一下,在第一行的Price和Date of production中輸入英文字母,然后按“Submit”提交。你會看到頁面為空白,再看一下服務器的控制臺輸出,有如下語句: 警告: No result defined for action tutorial.ProductConfirm and result input,它提示我們沒有為Action定義輸入結果,所以,我們應該在源代碼文件夾下的struts.xml中的ProductConfirm Action中加入以下代碼:
重新加載應用程序,刷新瀏覽器重新提交請求,這時頁面返回AddProducts.jsp,格式錯誤的輸入框的值被保留,如下圖6所示:圖6 沒有提示的錯返回頁面
當然,我們還可以在頁面上加上錯誤提示信息,通過在AddProducts.jsp的“<body>”后,加入下面代碼可以實現:
刷新瀏覽器,重新提交請求,出現如圖7所示頁面:圖7 帶提示的錯返回頁面
以上的功能的都是通過Struts 2.0里的一個名為conversionError的攔截器(interceptor)工作,它被注冊到默認攔截器棧(default interceptor stack)中。Struts 2.0在轉換出錯后,會將錯誤放到ActionContext中,在conversionError的作用是將這些錯誤封裝為對應的項錯誤(field error),因此我們可以通過<s:fielderror />來將其在頁面上顯示出來。另外,大家看第二和第三行的Price都被賦為0.0的值,而第一行則保留其錯誤值。這同樣是conversionError的功勞——沒有出錯的行調用的products[index].price(默認值為0.0),而出錯的行則會被賦為頁面所提交的錯誤值,這樣可以提供更好的用戶體驗。
Struts 2.0的轉換器簡化的WEB應用程序的模型,為我們的編程帶來極大的方便。
Copyright @ 草兒 Powered by: .Text and ASP.NET Theme by: .NET Monster