struts和struts2,Struts2 转换器

 2023-09-28 阅读 25 评论 0

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

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

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

struts和struts2。  优点:简单方便

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

二、给数据库增加字典表

java转换二进制、  优点:从根源上解决了问题

  缺点:增加了数据库压力

三、使用struts2转换器

java任意进制转换。  优点:一次配置终生使用

  缺点:暂未发现

 

  下面就重点讲下struts2的用法

........

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

public class BaseTypeConverter extends StrutsTypeConverter {protected static Logger logger = Logger.getLogger(BaseTypeConverter.class.getName());@Overridepublic Object convertFromString(Map arg0, String[] arg1, Class arg2) {// TODO Auto-generated method stubreturn null;}@Overridepublic String convertToString(Map arg0, Object arg1) {// TODO Auto-generated method stubreturn null;}}

 

public class IntegerTypeConverter extends BaseTypeConverter {@Overridepublic 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;}@Overridepublic 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 {@Overridepublic 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;}@Overridepublic 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()方法能够拿到你请求的字段是什么,根据此方法得到的字段值进行判断

 

转载于:https://www.cnblogs.com/BrightMoon/p/3770143.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/101881.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息