struts2中批量封装对象(续)
由于第一个不一编辑就出莫名其妙的问题,所以就写了个续:
?
?
转换错误处理
不知道大家在运行上面的例子时,有没有填错日期或数字情况,又或者您有没有思考过这种情况?如果还没有尝试的朋友可以试一下,在第一行的Price和Date of production中输入英文字母,然后按“Submit”提交。你会看到页面为空白,再看一下服务器的控制台输出,有如下语句:
严重: Could not find action or result No result defined for action product.ProductConfirm and result input - action,
?
它提示我们没有为Action定义输入结果,
所以,我们应该在源代码文件夹下的struts.xml中的ProductConfirm Action中加入以下代码:
<result name="input">/addproducts.jsp</result>
?
重新加载应用程序,刷新浏览器重新提交请求,这时页面返回addproducts.jsp,格式错误的输入框的值被保留,如下图所示:
?
?
?
?
当然,我们还可以在页面上加上错误提示信息,通过在addproducts.jsp的“<body>”后,加入下面代码可以实现:
<div style="color:red">
? ? <s:fielderror />
</div>
刷新浏览器,重新提交请求,出现如图所示页面:
?
?
以上的功能的都是通过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),而出错的行则会被赋为页面所提交的错误值,这样可以提供更好的用户体验。
?
?