zoukankan      html  css  js  c++  java
  • struts2学习笔记(4)——数据类型转换

    回过头来看昨天的那个例子。 

    在昨天的例子中,只转换了一个Point类,如果想转换多个Point类怎么办呢?在昨天的例子上面做一个小的修改。 

    首先在input.jsp页面中修改几个输入框。 

    <s:textfield name="point1" label="point1"></s:textfield> 
    <s:textfield name="point2" label="point2"></s:textfield> 
    <s:textfield name="point3" label="point3"></s:textfield> 

    这样可以在输入界面中增加几个输入框。 

    接着修改ConverterAction类: 

    private Point point1; 
    private Point point2; 
    private Point point3; 

    增加set和get方法。 

    接着修改output.jsp页面。 

    point1:<s:property value="point1"/><br/> 
    point2:<s:property value="point2"/><br/> 
    point3:<s:property value="point3"/><br/> 

    最重要的是需要配置属性文件ConverterAction-conversion.properties,修改成如下内容: 

    point1=cn.tshining.converter.PointConverter 
    point2=cn.tshining.converter.PointConverter 
    point3=cn.tshining.converter.PointConverter 

    根据上次课所学应该可以很轻松地分析出来…… 


    但是如果有多个类需要转换,那么用之前的方法就要为每个 类写一个属性文件。有什么方法可以简单一点呢?那么我们使用的就是全局类型转换。 

    全局类型转换就是将转换配置信息写到一个特有的文件中,文件名为xwork-conversion.propreties 

    内容为: 

    cn.tshining.beans.Point=cn,tshining.converter.PointConverter 

    等号左边为要转换的类,右边为用什么类进行转换。 

    这个文件得放在什么地方呢?这个文件必须放在和struts.xml同目录下。 


    接下来回到PointConverter类。有没有其他的实现方法呢?这个类还可以继承StrutsTypeConverter类,以及覆盖其方法convertFromString()和convertToString(),方法逻辑和之前类似。这里不再叙述。 



    那么struts2框架可以转换集合类型吗?答案是肯定的,通过这个例子可以很清楚的看到: 

    现在我要转换List<Point>这个集合,改怎么做呢? 

    首先修改ConverterAction类,定义字段private List<Point> point;,然后生成set和get方法。 

    接着修改input.jsp页面 

    <s:textfield name="point" label="point1"></s:textfield> 
    <s:textfield name="point" label="point2"></s:textfield> 
    <s:textfield name="point" label="point3"></s:textfield> 

    由于Point现在是一个集合,所以上面文本字段的name是一样的。 

    修改output.jsp页面: 

    point:<s:property value="point"/><br/> 

    同样,由于Point是集合,所以只用一个输出就可以了。 

    修改PointConverter类: 

    public class PointConverter3 extends StrutsTypeConverter {
    
        @Override 
        public Object convertFromString(Map context, String[] value, Class toType) {
    
            List list = new ArrayList();
    
            for (String str : value) {
    
                Point point = new Point();
    
                String[] param = str.split(","); 
                int x = Integer.parseInt(param[0]); 
                int y = Integer.parseInt(param[1]);
    
                point.setX(x); 
                point.setY(y);
    
                list.add(point); 
            }
    
            return list;
    
        }
    
        @Override 
        public String convertToString(Map context, Object value) {
    
            List list = (List) value;
    
            StringBuilder sb = new StringBuilder();
    
            for (Point point : list) {
    
                int x = point.getX(); 
                int y = point.getY();
    
                sb.append("[ x = ").append(x).append(" , y = ").append(y).append( 
                        " ] ");
    
            } 
            return sb.toString();
    
        }
    
    } 

    最后修改properties文件,注意,在此,只能使用局部配置文件,将全局配置文件注释,修改局部配置文件为如下内容: 

    point=cn.tshining.converter.PointConverter 

    关于类型转换基本上结束了,最后,有什么方法可以不需要类型转换就可以获得用户输入吗?? 


    将Action中Point修改为原来的private Point point; 

    在Point中覆盖toSting()方法。然后注释所有的属性文件。 

    <s:textfield name="point.x" label="x"></s:textfield> 
    <s:textfield name="point.y" label="y"></s:textfield> 

    如此即可以不用进行数据类型转换。 

    在此,Point类必须有不带参数的构造方法才可以成功得到输入。 

    虽然这种方法比较简便,但是却增加了表单项,在某种意义上不建议使用。 


    以上便是今天学习的类型转换的知识。

    原地址:http://blog.csdn.net/fanghao16/article/details/4715316

  • 相关阅读:
    如何紧急恢复SQL Server主数据库
    合理利用SQL Server查询执行计划
    理解RAID的四种级别
    sp_spaceused 显示行数、保留的磁盘空间以及当前数据库中的表、索引视图
    修复数据库索引问题:理解填充因数设置
    SQL Server调整因子
    sqlservr 命令行启动
    DBA需要考虑备份相关问题
    BCP
    “tablediff ”命令行工具
  • 原文地址:https://www.cnblogs.com/yanff/p/3569663.html
Copyright © 2011-2022 走看看