Struts2类型转换(一)-类型转换概述,错误消息显示与定制
一、类型转换概述
二、类型转换出错时如何进行处理
三、类型转换错误消息的显示与定制
1 <s:debug></s:debug> 2 3 <s:form action="testConversion"> 4 <s:textfield name="age" label="Age"></s:textfield> 5 <br><br> 6 <s:submit></s:submit> 7 </s:form>
2)Java主要代码如下:
1 package com.atguigu.struts2.app; 2 3 import com.opensymphony.xwork2.ActionSupport; 4 5 public class ConversionAction extends ActionSupport{ 6 7 private int age; 8 9 public int getAge() { 10 return age; 11 } 12 13 public void setAge(int age) { 14 this.age = age; 15 } 16 17 public String execute(){ 18 System.out.println("age: " + age); 19 return "success"; 20 } 21 22 }
3)struts.xml基本配置如下:
<package name="default" namespace="/" extends="struts-default"> <action name="testConversion" class="com.atguigu.struts2.app.ConversionAction"> <result>/success.jsp</result> <result name="input">/index.jsp</result> </action> </package>
将项目发布后运行,当我们输入非整数字符提交后的运行结果如下图:
问题1: 如何覆盖默认的错误消息?
1). 在对应的 Action 类所在的包中新建ActionClassName.properties 属性文件, ActionClassName 即为包含着输入字段的 Action 类的类名
2). 在属性文件中添加如下键值对: invalid.fieldvalue.fieldName=custom error message。(注意:在这里只是写出了字段名,并没有写Action的名称,因为通过properties文件名已经可以定位到Action对象了。)
示例二:
为示例一添加属性文件:ConversionAction.properties,并在文件中提交键值对:invalid.fieldvalue.age=\u9519\u8BEF\u7684\u5E74\u9F84\u683C\u5F0F.(即“错误的年龄格式.”)
运行结果如下图:
问题2: 如果是 simple 主题, 还会自动显示错误消息吗? 如果不会显示, 怎么办 ?
修改主题为simple后,可以看到此时不能自动的显示错误消息,因此,我们可以通过下述方法来显示错误消息:
1). 通过 debug 标签,可知若转换出错, 则在值栈的 Action(实现了 ValidationAware 接口) 对象中有一个 fieldErrors 属性,
该属性的类型为 Map<String, List<String>>(通过Debug标签中的fieldErrors属性格式初步判断其为数组类型或集合类型,之后可以在ActionSupport中的set/getFieldErrors方法中进一步验证其类型),其中键: 字段(属性名), 值: 错误消息组成的 List。 所以可以使用 EL 或 OGNL 的方式来显示错误消息: ${fieldErrors.age[0]}
2). 还可以使用 s:fielderror 标签来显示,可以通过 fieldName 属性显示指定字段的错误。
1 <s:form action="testConversion" theme="simple"> 2 Age: <s:textfield name="age" label="Age"></s:textfield> 3 ${fieldErrors.age[0]} 4 <s:fielderror fieldName="age"></s:fielderror> 5 <br><br> 6 <s:submit></s:submit> 7 </s:form>
运行结果如下图:
问题3: 若是 simple 主题,且使用 <s:fielderror fieldName="age"></s:fielderror>标签来显示错误消息,则该消息在一个 ul, li, span 中。 如何去除 ul, li, span 呢 ?
思路一:由于每一条出错消息都被打包在一个 HTML span 元素里, 可以通过覆盖其行标为 errorMessage 的那个 css 样式来改变出错消息的格式。但是这种方法不利于我们系统整体样式的维护。
★★★思路二:在 Struts2的template.simple包下面的 fielderror.ftl 文件里定义了 simple 主题下 s:fielderror 标签显示错误消息的样式,所以修改该配置文件即可。
★★★修改模板的方法:在 src 下新建 template.simple 包, 新建 fielderror.ftl 文件,把原生的 fielderror.ftl 中的内容复制到新建的 fielderror.ftl 中,然后剔除 ul, li, span 部分即可。