Struts2.0学习笔记---注册时输入类型不匹配并显示

29 篇文章 0 订阅


Struts2类型转换(一)-类型转换概述,错误消息显示与定制

一、类型转换概述

1、 从一个 HTML 表单到一个 Action 对象, 类型转换是从字符串到非字符串。
  因为HTTP 没有 “类型” 的概念,每一项表单输入只可能是一个字符串或一个字符串数组。因此, 在服务器端, 必须把 String 转换为特定的数据类型。(详细讲述可参考《Struts2技术内幕-深入解析Struts2架构设计与实现原理》的第6章-“OGNL,数据流转的催化剂”中的6.1.1节-数据流转的困境)
2、 在 struts2 中, 把请求参数映射到 action  属性的工作由 Parameters 拦截器负责, 它是默认的拦截器栈defaultStack中的一员。
Parameters 拦截器可以自动完成字符串和基本数据类型之间转换

二、类型转换出错时如何进行处理

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

三、类型转换错误消息的显示与定制

struts当Action实现了ValidationAware接口时,若类型转换出错,则Struts会查找配置文件中定义的“name=input”的result,而
作为默认的 defaultStack 拦截器栈的一员, ConversionError 拦截器负责添加与类型转换有关的出错消息(前提: Action 类必须实现了 ValidationAware 接口)和保存各请求参数的原始值,以便
在页面上显示错误提示消息和回显表单(只有在Struts2的非simple主题下才会自动显示错误消息)。

核心代码如下:注册界面
<s:form action="testConversion">
    <s:textfield name="age" label="Age"></s:textfield>
    <br><br>
<s:submit></s:submit>
</s:form>
struts.xml
    <constant name="struts.custom.i18n.resources"  value="package"/>   //用来设置输出格式为中文

     <action name="testConversion" class="com.wanhao.ConversionAction">
        <result>/show.jsp</result>
        <result name="input">/show.jsp</result>
    </action>        

ConversionAction.java
public class ConversionAction extends ActionSupport{
    private int age;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String execute(){
        System.out.println("age: " + age);
        return "success";
    }  
}


然后在ConversionAction.java包下新建package_zh_CN.properties
加入一句话:
invalid.fieldvalue.age=\u4F60\u8F93\u5165\u7684\u5E74\u9F84\u683C\u5F0F\u4E0D\u6B63\u786E
 其实右边的内容就是:你输入的年龄格式不正确
左边就是,第一次运行之后,从显示在屏幕上Invalid field value for field "age" 的话中提炼出的属性。即invalid.fieldvalue.age


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值