无为则可为,无为则至深!
接看,在同上的包中加入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