Struts2 类型转换错误相关。

如果类型转换失败:
若 Action 类没有实现 ValidationAware 接口: Struts 在遇到类型转换错误时仍会继续调用其 Action 方法, 就好像什么都没发生一样.
若 Action 类实现 ValidationAware 接口:Struts 在遇到类型转换错误时将不会继续调用其 Action 方法: Struts 将检查相关 action 元素的声明是否包含着一个 name=input 的 result. 如果有, Struts 将把控制权转交给那个 result 元素; 若没有 input 结果, Struts 将抛出一个异常

问题1:如何覆盖默认的错误消息?
1.在对应的Action类所在的包中新建 ActionClassName.properties 文件, ActionClassName 即为包含着输入字段的 Action 类的类名。
2.在属性文件中添加如下键值对:invalid.fieldvalue.fieldName=xxx

问题2:如果是 simple 主题,还会自动显示错误消息吗?如果不会显示,怎么办?
1.通过 debug 标签, 可知若转换出错, 则在值栈的 Action(实现了 ValidationAware 接口) 对象中有一个 fieldErrors 属性, 该属性的类型为 Map 健:字段(属性名),值:错误消息组成的List, 所以可使用 LE 或 OGNL 的方式来显示错误消息 : ${fieldErrors.age[0] }
2.还可以使用s:fielderror 标签来显示,可以通过 fieldName 属性来显示指定字段的错误。

<s:fielderror fieldName="age"></s:fielderror>

问题3:若是 simple 主题,且使用 上面代码块来显示错误消息,则该消息在一个ul, li, span 中,如何去除 ul, li, span呢?
在template.simple 下面的 fielderror.ftl 定义了 simple 主题下, s:fielderror 标签显示错误消息的样式,所以修改该配置文件即可,在 src 下新建 template.simple 包,新建 fielderror.ftl 文件, 把原生的 fielderror.ftl 中的内容复制到新建的 fielderror.ftl 中,然后删除 ul, li, span 部分即可。

问题4:如何自定义类型转换器?
1.为什么需要自定义的类型转换器? 因为 Struts 不能自动完成字符串到引用类型的转换
2.如何自定义类型转换器
I.开发类型转换器的类:拓展 StrutsTypeConverter 类
II.配置类型转换器
①. 基于字段的配置:
在字段所在的 Model(可能是 Action,可能是一个 JavaBean )的包下,新建一个 ModelClassName-conversion.properties
在该文件中输入键值对: fieldName=类型转换器的全类名
第一次使用该转换器时创建实例
类型转换器时单实例的
②. 基于类型的配置:
在 src 下新建 xwork-conversion.properties
键入: 待转换的类型=类型转换器的全类名
在当前Struts2应用被加载时创建实例

类型转换器与复杂属性
1.Department 是模型, 实际录入的 Department. deptName可以直接写到 s:textfield 的 name 属性中 ,那 mgr 的属性如何处理呢?

struts2 表单标签的 name 值可以被赋为属性的属性: name=mgr.name;

2 mgr 中有一个 Date 类型的 birth 属性, Struts2 可以完成自动的类型转换吗?

 全局的转换器可以正常工作

猜你喜欢

转载自blog.csdn.net/sinat_27108161/article/details/53736767