Struts2技術中Converter(轉換器)的使用打賞

左側為項目樹形圖截圖。
web.xml的配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
? ? xmlns="http://java.sun.com/xml/ns/j2ee"
? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
? ? xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
? ? <display-name>Struts2Hello</display-name>
? ? <filter>
? ? ? ? <filter-name>struts2</filter-name>
? ? ? ? <filter-class>
? ? ? ? ? ? org.apache.struts2.dispatcher.FilterDispatcher

? ? ? ? </filter-class><!-- 以過慮器的形式出現 -->
? ? </filter>
? ? <filter-mapping>
? ? ? ? <filter-name>struts2</filter-name>
? ? ? ? <url-pattern>/*</url-pattern><!-- 過慮所有內容 -->
? ? </filter-mapping>
? ? <welcome-file-list>
? ? ? ? <welcome-file>index.html</welcome-file>
? ? ? ? <welcome-file>index.htm</welcome-file>
? ? ? ? <welcome-file>index.jsp</welcome-file>
? ? ? ? <welcome-file>default.html</welcome-file>
? ? ? ? <welcome-file>default.htm</welcome-file>
? ? ? ? <welcome-file>default.jsp</welcome-file>
? ? </welcome-file-list>
</web-app>

演示頁面index.jsp

<%@page contentType="text/html; charset=GBK"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
? ? <head>
? ? ? ? <title>Converter</title>
? ? </head>
? ? <body>
? ? ? ? <s:form action="HelloWorld" theme="simple">
? ? ? ? ? ? <%
? ? ? ? ? ? ? ? // name="loc" 是LoginAction.java中的private Locale loc = Locale.CHINA;
? ? ? ? ? ? %>
? ? Locale:<s:textfield name="loc" />
? ? ? ? ? ? <br>
? ? ? ? ? ? <s:submit />
? ? ? ? </s:form>
? ? ? ? <br>
? ? ? ? <h2>
? ? ? ? ? ? <s:property value="msg" />
? ? ? ? </h2>
? ? </body>
</html>

演示頁面submit.jsp

<%@page contentType="text/html; charset=GBK"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
? ? <head>
? ? ? ? <title>submit</title>
? ? </head>
? ? <!-- 提交頁面,頁面信息為Action中的集合屬性 -->
? ? <body>
? ? ? ? <!-- 錯誤提示層(錯誤顯示信息), s:fielderror會自動檢測頁面中所有域(輸入框等)中的錯誤信息-->
? ? ? ? <div style="color: red">
? ? ? ? ? ? <s:fielderror></s:fielderror>
? ? ? ? </div>
? ? ? ? <s:form action="ProductConfirm" theme="simple">
? ? ? ? ? ? <table>
? ? ? ? ? ? ? ? <tr style="background-color: powderblue; font-weight: bold;">
? ? ? ? ? ? ? ? ? ? <td>
? ? ? ? ? ? ? ? ? ? ? ? Product Name
? ? ? ? ? ? ? ? ? ? </td>
? ? ? ? ? ? ? ? ? ? <td>
? ? ? ? ? ? ? ? ? ? ? ? Price
? ? ? ? ? ? ? ? ? ? </td>
? ? ? ? ? ? ? ? ? ? <td>
? ? ? ? ? ? ? ? ? ? ? ? Date of Production
? ? ? ? ? ? ? ? ? ? </td>
? ? ? ? ? ? ? ? </tr>
? ? ? ? ? ? ? ? <%
? ? ? ? ? ? ? ? ? ? //1.s:iterator:使用迭代器
? ? ? ? ? ? ? ? ? ? ? ? //2.value="new int[3]" status="stat":整形數組集合對應action中的List集合;每次取出一個值存入stat中
? ? ? ? ? ? ? ? ? ? ? ? //3. products['+#stat.index+'].name:OGNL表達式,相當于<%= "products[" + stat.index + "].name" %>
? ? ? ? ? ? ? ? ? ? ? ? // ? ? ? ?(1)products對應action(ProductConfirm.java)中的 products屬性,
? ? ? ? ? ? ? ? ? ? ? ? // ? ? ? ?(2)整個句子的作用是從action中找到products并取出products的name屬性
? ? ? ? ? ? ? ? ? ? ? ? // ? ? ? ?(3)規范表達式:%{Action 中的屬性集合[整數數組的迭代取值].具體pojo類的屬性}
? ? ? ? ? ? ? ? %>
? ? ? ? ? ? ? ? <s:iterator value="new int[3]" status="stat">
? ? ? ? ? ? ? ? ? ? <tr>
? ? ? ? ? ? ? ? ? ? ? ? <td>
? ? ? ? ? ? ? ? ? ? ? ? ? ? <s:textfield name="%{'products['+#stat.index+'].pname'}" />
? ? ? ? ? ? ? ? ? ? ? ? </td>
? ? ? ? ? ? ? ? ? ? ? ? <td>
? ? ? ? ? ? ? ? ? ? ? ? ? ? <s:textfield name="%{'products['+#stat.index+'].price'}" />
? ? ? ? ? ? ? ? ? ? ? ? </td>
? ? ? ? ? ? ? ? ? ? ? ? <td>
? ? ? ? ? ? ? ? ? ? ? ? ? ? <s:textfield name="%{'products['+#stat.index+'].pdate'}" />
? ? ? ? ? ? ? ? ? ? ? ? </td>
? ? ? ? ? ? ? ? ? ? </tr>
? ? ? ? ? ? ? ? </s:iterator>
? ? ? ? ? ? ? ? <tr>
? ? ? ? ? ? ? ? ? ? <td colspan="3">
? ? ? ? ? ? ? ? ? ? ? ? <s:submit />
? ? ? ? ? ? ? ? ? ? ? ? ?</td>
? ? ? ? ? ? ? ? </tr>
? ? ? ? ? ? </table>
? ? ? ? </s:form>
? ? </body>
</html>

演示頁面show.jsp

<%@ page contentType="text/html; charset=GBK"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
? ? <head>
? ? ? ? <title>show</title>
? ? </head>
? ? <!-- 顯示頁面,顯示Action中的集合屬性 -->
? ? <body>
? ? ? ? <table>
? ? ? ? ? ? <tr style="background-color: powderblue; font-weight: bold;">
? ? ? ? ? ? ? ? <td>
? ? ? ? ? ? ? ? ? ? Product Name
? ? ? ? ? ? ? ? </td>
? ? ? ? ? ? ? ? <td>
? ? ? ? ? ? ? ? ? ? Price
? ? ? ? ? ? ? ? </td>
? ? ? ? ? ? ? ? <td>
? ? ? ? ? ? ? ? ? ? Date of Production
? ? ? ? ? ? ? ? </td>
? ? ? ? ? ? </tr>
? ? ? ? ? ? <!-- s:iterator value="products" status="stat":與提交頁面submit.jsp相同 -->
? ? ? ? ? ? <s:iterator value="products" status="stat">
? ? ? ? ? ? ? ? <tr>
? ? ? ? ? ? ? ? ? ? <td>
? ? ? ? ? ? ? ? ? ? ? ? <s:property value="pname" />
? ? ? ? ? ? ? ? ? ? </td>
? ? ? ? ? ? ? ? ? ? <td>
? ? ? ? ? ? ? ? ? ? ? ? $
? ? ? ? ? ? ? ? ? ? ? ? <s:property value="price" />
? ? ? ? ? ? ? ? ? ? </td>
? ? ? ? ? ? ? ? ? ? <td>
? ? ? ? ? ? ? ? ? ? ? ? <s:property value="pdate" />
? ? ? ? ? ? ? ? ? ? </td>
? ? ? ? ? ? ? ? </tr>
? ? ? ? ? ? </s:iterator>
? ? ? ? </table>
? ? </body>
</html>

LocaleConverter.java源代碼

package com.action;

import java.lang.reflect.Member;
import java.util.Locale;
import java.util.Map;

// 繼承ognl默認的格式轉換類

public class LocaleConverter extends ognl.DefaultTypeConverter {
    @Override
    // Map context:上下上下文對象; Object value:待轉換對象; Class toType:目標類型
    public Object convertValue(Map context, Object value, Class toType) {
        // 如果要轉換的是本地化類型Locale.class(如整形:Integer.class)
        if (toType == Locale.class) {
            // 把待轉換類型強制轉換成字符串類型,并取第一個元素
            String locale = ((String[]) value)[0];
            // 截取字符串去掉"_";如果zh_CN截取得(zh,CN)
            return new Locale(locale.substring(0, 2), locale.substring(3));
        }
        // 轉換成字符串類型
        else if (toType == String.class) {
            Locale locale = (Locale) value;
            return locale.toString();
        }
        return null;
    }
}

LoginAction.java源代碼

package com.action;

import java.util.Locale;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.LocalizedTextUtil;

@SuppressWarnings("serial")
public class LoginAction extends ActionSupport {
    private String msg;
    private Locale loc = Locale.CHINA;    //默認語言版本的中文
    public LoginAction() {
        super();
        // TODO Auto-generated constructor stub
    }
    public LoginAction(String msg, Locale loc) {
        super();
        this.msg = msg;
        this.loc = loc;
    }
    @Override
    public String execute() throws Exception {

        //LocalizedTextUtil是struts2.0中的國際化初始化工具,
        //獲取當前資源文件中的名為HelloWorld的key,然后使用loc語言版本    
        msg = LocalizedTextUtil.findDefaultText("HelloWorld", loc);
        return SUCCESS;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Locale getLoc() {
        return loc;
    }

    public void setLoc(Locale loc) {
        this.loc = loc;
    }
}

ProductConfirm.java源代碼

package com.action;

import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
import com.pojo.Product;
@SuppressWarnings("serial")
public class ProductConfirm extends ActionSupport {
    // 標準list集合,這里為了避免html轉碼,將<>寫為< <>>,使用時候替換即可
    private List< <product>> products;
    public List< <product>> getProducts() {
        return products;
    }

    public void setProducts(List< <product>> products) {
        this.products = products;
    }
    @Override
    public String execute() throws Exception {
        //遍歷products列表
        for (Product p : products) {
            System.out.println(p.getPname() + "|" + p.getPrice() + "|"
                    + p.getPdate());
        }
        return SUCCESS;
    }
}

Product.java源代碼

package com.pojo;
import java.io.Serializable;
import java.util.Date;
@SuppressWarnings("serial")
public class Product implements Serializable {

    //String,double,Date數據類型系統都內置有他們的轉換器,無需另寫轉換器
    private String pname;
    private double price;
    private Date pdate;

    public Product() {

    }

    public String getPname() {
        return pname;
    }

    public void setPname(String pname) {
        this.pname = pname;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public Date getPdate() {
        return pdate;
    }

    public void setPdate(Date pdate) {
       this.pdate = pdate;
    }

    public Product(String pname, double price, Date pdate) {
        super();
        this.pname = pname;
        this.price = price;
        this.pdate = pdate;
    }
}

src/com.action.ProductConfirm-conversion.properties
ProductConfirm-conversion.properties //固定格式Action名-conversion.properties
Element_products=com.pojo.Product //表明products的轉換類型是Product,固定格式添加:Element_集合屬性名=集合對象的實現類

Element_products=com.pojo.Product

src/xwork-conversion.properties
xwork-conversion.properties //全局轉換配置文件,必須放在SRC目錄下,文件名固定!
java.util.Locale = com.action.LocaleConverter //自動調用com.action.LocaleConverter來轉換

java.util.Locale =com.action.LocaleConverter

src/struts.properties

struts.custom.i18n.resources=globalMessages

src/globalMessages_en_US.properties

HelloWorld=HelloWorld
failtip={0}Login failed\!
language=Select language
smg=Now is{0}
succtip={0}Welcome,Login success.
usen=Americal English
zhcn=Simplified Chinese

src/globalMessages_zh_CN.properties

HelloWorld=\u4F60\u597D
failtip={0}\u767B\u5F55\u5931\u8D25
language=\u9009\u62E9\u8BED\u8A00
smg={0}\u73B0\u5728\u7684\u4E8B\u4EF6\u662F{1}
succtip={0}\u6B22\u8FCE,\u767B\u5F55\u6210\u529F
usen=\u82F1\u8BED
zhcn=\u4E2D\u6587

struts.xml配置文件配置如下

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
? ? ? ? ?"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
? ? ? ? ?"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
? ? <include file="struts-default.xml" /><!-- 使用缺省的struts的配置文件 -->
? ? <!-- 包空間 ConverterDemo 繼承 struts-default -->
? ? <package name="ConverterDemo" extends="struts-default">
? ? ? ? <!-- 映射名name="HelloWorld" 與 index.jsp 中的 action="HelloWorld" 對應,使用com.action.LoginAction來實現 -->
? ? ? ? <action name="HelloWorld">
? ? ? ? ? ? <result>/index.jsp</result>
? ? ? ? </action>
? ? ? ? <!--
? ? ? ? ? ? 1.映射名name="ProductConfirm" 與 submit.jsp 中的 action="ProductConfirm" 對應,使用com.action.ProductConfirm來實現
? ? ? ? ? ? 2.成功轉到show.jsp頁面
? ? ? ? ? ? 3.失敗轉入submit.jsp頁面
? ? ? ? -->
? ? ? ? <action name="ProductConfirm"
? ? ? ? ? ?>
? ? ? ? ? ? <result>/show.jsp</result>
? ? ? ? ? ? <result name="input">/submit.jsp</result>
? ? ? ? </action>
? ? </package>
</struts>
Struts2技術中Converter(轉換器)的使用
文章《Struts2技術中Converter(轉換器)的使用》二維碼
  • 微信打賞
  • 支付寶打賞

已有6條評論

  1. 免備案空間

    嗯嗯,來啦。面對這些頭疼的字母,還得要看的

    2012-06-11 09:58 回復
  2. 蕾絲連衣裙

    這個看起來有點復雜啊

    2012-04-24 17:56 回復
  3. 藤桌椅

    不錯

    2012-04-24 16:03 回復
  4. 昊云

    支持下樓主

    2012-04-24 13:07 回復
  5. 免備案空間

    關注了解一下,

    2012-04-24 11:55 回復

(必填)

(必填)

(可選)

黑龙江22选5开奖