struts2类型转换

从何网页上接收到的数据类型一般都是String类型的,然而数据库内部存储的属性以及我们定义的实体类属性类型多种多样,怎样将其进行转化?
Prams拦截器给我们完成了一部分工作,其可以把常见的简单类型自动转化,但是他不是万能的,如果从网页接收到格式错误的数据,则需要我们进行处理。

解决办法有以下几种:(摘自佟刚课件)
问题1: 如何覆盖默认的错误消息?
1). 在对应的 Action 类所在的包中新建
ActionClassName.properties 文件, ActionClassName 即为包含着输入字段的 Action 类的类名
2). 在属性文件中添加如下键值对: invalid.fieldvalue.fieldName=xxx

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

2). 还可以使用 s:fielderror 标签来显示. 可以通过 fieldName 属性显示指定字段的错误.

问题3. 若是 simple 主题, 且使用  <s:fielderror fieldName="age"></s:fielderror> 来显示错误消息, 则该消息在一个 
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 应用被加载时创建实例. 

-->

<s:debug></s:debug>

<s:form action="testConversion" theme="simple">
    Age: <s:textfield name="age" label="Age"></s:textfield>
    ${fieldErrors.age[0] }
    ^<s:fielderror fieldName="age"></s:fielderror>
    <br><br>

    Birth: <s:textfield name="birth"></s:textfield>
    <s:fielderror fieldName="birth"></s:fielderror>
    <br><br>

    <s:submit></s:submit>
</s:form>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值