分享

Struts2自定义类型转换器配置

 鹰皇软件 2014-01-15

类型转换分两类

1 局部类型转换
1.1 普通Action中的类型转换
配置文件存放目录:Action同级目录;
配置文件名:Action名-conversion.properties文件
转换器:自定义转换器实现TypeConverter接口,可以直接继承StrutsTypeConverter来实现;
内容:Action属性名=转换器包路径

 

1.2 基于模型驱动的类型转换
配置文件存放目录:模型同级目录;
配置文件名:模型名-conversion.properties文件
转换器:自定义转换器实现TypeConverter接口,可以直接继承StrutsTypeConverter来实现;
内容:模型属性名=转换器包路径

 

2 全局类型转换
配置文件存放目录:项目根目录;
配置文件名:work-conversion.properties文件
转换器:自定义转换器实现TypeConverter接口,可以直接继承StrutsTypeConverter来实现;
内容:要转换的类型包路径=转换器包路径

注意:若在模型驱动情况下,即配置了Action的类型转换器又配置了对应模型的转换器,此时只会选择模型转换器;

 

3 示例

3.1 模型驱动情况示例

[TestAction.java]

package com.struts2.demo;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.struts2.demo.bean.TestBean;

public class TestAction extends ActionSupport implements ModelDriven{
 
 private static final long serialVersionUID = -3557249908855957132L;
 
 private TestBean bean = new TestBean();
 
 public TestBean getBean() {
  return bean;
 }

 public void setBean(TestBean bean) {
  this.bean = bean;
 }

 public String input() throws Exception {
  return "input";
 }
 
 public String execute() throws Exception {
        return "success";
    }

 public TestBean getModel() {
  return this.bean;
 }
}

 

[TestBean.java]

package com.struts2.demo.bean;

import java.math.BigDecimal;
import java.util.Date;

public class TestBean {
 private String str;
 private BigDecimal num;
 private BigDecimal[] numArray;
 private Date date;

 public String getStr() {
  return str;
 }

 public void setStr(String str) {
  this.str = str;
 }

 public BigDecimal getNum() {
  return num;
 }

 public void setNum(BigDecimal num) {
  this.num = num;
 }

 public BigDecimal[] getNumArray() {
  return numArray;
 }

 public void setNumArray(BigDecimal[] numArray) {
  this.numArray = numArray;
 }

 public Date getDate() {
  return date;
 }

 public void setDate(Date date) {
  this.date = date;
 }

}

 

[DateTypeConverter.java]

package com.struts2.demo;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

public class DateTypeConverter extends StrutsTypeConverter {
 // Ognl默认会转换yyyy-MM-dd格式的日期;这里测试使用yyyyMMdd格式;
 private static final SimpleDateFormat DEFAULT_FORMAT = new SimpleDateFormat("yyyyMMdd");
 
 @Override
 public Object convertFromString(Map context, String[] values, Class toClass) {
  if (values[0] == null || "".equals(values[0])) {
   return null;
  }
  
  Date result = null;
  try {
   if (toClass.equals(Date.class)) {
    result = DEFAULT_FORMAT.parse(values[0]);
   }
  } catch (ParseException e) {
   e.printStackTrace();
  }
  
  return result;
 }

 @Override
 public String convertToString(Map context, Object o) {
  String result = "";
  if (o != null) {
   result = DEFAULT_FORMAT.format(o);
  }
  return result;
 }
}


 

[demo.xml] include进struts.xml中;

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts./dtds/struts-2.0.dtd">

<struts>

    <package name="demo" namespace="/demo" extends="default">

        <action name="test_*" class="com.struts2.demo.TestAction" method="{1}">
            <result name="input">/WEB-INF/page/demo/input.jsp</result>
            <result name="success">/WEB-INF/page/demo/result.jsp</result>
        </action>

    </package>
</struts>


[input.jsp]

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>

<html>
<head><title>demo input</title></head>
<body>
    <s:form namespace="/demo" action="test" method="post">
    str: <s:textfield name="str" /><br/>
    num: <s:textfield name="num" /><br/>
    numArray: <s:textfield name="numArray" value="%{numArray[0]}"/><s:textfield name="numArray" value="%{numArray[1]}"/><br/>
    date: <s:textfield name="date" /><br/>
    <s:submit value="提交"></s:submit>
    </s:form>
</body>
</html>

 

[result.jsp]

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>

<html>
<head><title>demo result</title></head>
<body>
    str: <s:property value="bean.str"/><br/>
    num: <s:property value="bean.num"/><br/>
    numArray: <s:iterator value="bean.numArray">
     <s:property />
    </s:iterator><br/>
    date: <s:property value="bean.date"/><br/>
</body>
</html>

 

[TestBean-conversion.properties]

date=com.struts2.demo.DateTypeConverter

 

3.2 全局类型转换器

将以上配置文件“TestBean-conversion.properties”改名为“xwork-conversion.properties”,内容改为“java.util.Date=com.struts2.demo.DateTypeConverter”;

然后,将文件移动到项目源文件夹src下面;

 

以上测试通过!

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多