• Struts2 转换器


    Struts2为页面展示数据提供了良好的支持,使开发者可以自定义输出的值。比如,你数据库有个status字段,存储的是整数类型的数据,不同的数字代表着不同的意义。那么在页面展示数据的时候必然不能展示出数值!!有以下几种解决方案:

    一、使用struts2的标签库中的<s:if></s:if>。

      优点:简单方便

      缺点:太过于原始,如果很多地方都需要展示,就得多处添加

    二、给数据库增加字典表

      优点:从根源上解决了问题

      缺点:增加了数据库压力

    三、使用struts2转换器

      优点:一次配置终生使用

      缺点:暂未发现

      下面就重点讲下struts2的用法

    ........

    还是贴出代码吧,懂的人都懂

    public class BaseTypeConverter extends StrutsTypeConverter {
        protected static Logger logger = Logger.getLogger(BaseTypeConverter.class.getName());
        @Override
        public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
            // TODO Auto-generated method stub
            return null;
        }
    
        @Override
        public String convertToString(Map arg0, Object arg1) {
            // TODO Auto-generated method stub
            return null;
        }
        
    }
    public class IntegerTypeConverter extends BaseTypeConverter {
    
        @Override
        public Object convertFromString(Map context, String[] params, Class toType) {
            try {
                return new Integer(params[0].trim());
            } catch (NumberFormatException e) {
                logger.error("转换器:IntegerTypeConverter -- 12 line;提交的  Integer 类型转换异常-赋值为0");
            }
            /*return new Integer(0);*/
            return null;
        }
    
        @Override
        public String convertToString(Map context, Object value) {            
            try {
                return value.toString().trim();
            } catch (Exception e) {
                logger.error("转换器:IntegerTypeConverter -- 22 line;向页面打印的  Integer 类型转换异常-赋值为空字符串");
            }        
            return "";
        }
    
    }

      xwork-conversion.properties  文件

    java.lang.Integer=com.vincent.shop.converter.IntegerTypeConverter

      这个配置只是基础配置,给全局用的,针对个别实体的个别属性需要特别配置,学名叫做“局部转换器”。

      需要新建一个actionName-conversion.properties,同时注意,要放到跟Action相同的目录下。然后文件内容也不一样了。这个文件里是指定Action中的某个属性使用某个转换器,格式是属性名=转换器名,如date= com.res.DateConverter,可以由很多,也就是每一个属性都可以设置一个转换器

    例如 orderStatus 属性  0,未确认;1,已确认;2,已取消;3,无效;4,退货;

    public class OrderStatusInOrderInfoTypeConverter extends BaseTypeConverter {
    
        @Override
        public Object convertFromString(Map context, String[] params, Class toType) {
            try {
                return new Integer(params[0].trim());
            } catch (NumberFormatException e) {
                logger.error("转换器:IntegerTypeConverter -- 12 line;提交的  Integer 类型转换异常-赋值为0");
            }
            /*return new Integer(0);*/
            return null;
        }
    
        @Override
        public String convertToString(Map context, Object value) {
            String integerValue = "";
            try {
                OgnlContext ognlContext = (OgnlContext)context;
                System.out.println(ognlContext.getCurrentNode());
                String attribute = ognlContext.getCurrentNode().toString().replace(""", "");
                if(("orderStatus").equals(attribute.trim())){
                    int orderStatus = Integer.parseInt(value.toString().trim());
                    //0,未确认;1,已确认;2,已取消;3,无效;4,退货;
                    switch (orderStatus) {
                        case 0:
                            integerValue = "未确认";
                            break;
                        case 1:
                            integerValue = "已确认";
                            break;
                        case 2:
                            integerValue = "已取消";
                            break;
                        case 3:
                            integerValue = "无效";
                            break;
                        case 4:
                            integerValue = "退货";
                            break;
                        default:                        
                            break;
                    }
                }
                return integerValue;
            } catch (Exception e) {
                logger.error("转换器:IntegerTypeConverter -- 22 line;向页面打印的  Integer 类型转换异常-赋值为空字符串");
            }        
            return "";
        }
    
    }

      OrderInfoAction-conversion.properties 文件

    orderInfo.orderStatus=com.vincent.shop.converter.integer.OrderStatusInOrderInfoTypeConverter.java

     注:局部转换器只能用于set值的时候用,在页面输出数据,也就是get的时候不起作用,连局部转换器的方法都不进。但是全局是没有问题的。可以把输出的业务放到全局去做

    ((OgnlContext)context).getCurrentNode()方法能够拿到你请求的字段是什么,根据此方法得到的字段值进行判断
  • 相关阅读:
    HTML5中input输入框的种类
    perl mojo 编码
    perl encode_utf8 decode_utf8
    perl mojo use utf8 和no utf8
    perl unload oracle gbk
    perl unload Oracle utf8 数据库
    perl socket 返回发送成功数据的长度
    perl socket 客户端发送消息
    验证码识别(Tess4J初体验)
    Uploadify 3.2 参数属性、事件、方法函数详解
  • 原文地址:https://www.cnblogs.com/BrightMoon/p/3770143.html
Copyright © 2020-2023  润新知