Struts2架構的自訂類型轉換器

來源:互聯網
上載者:User

標籤:

  前言:對於java的基礎資料型別 (Elementary Data Type)及一些系統類別(如Date類、集合類),Struts2提供了內建類型轉換功能,但是也有一定的限制。所以就示範出自訂類型轉換器

一、應用於局部類型轉換器

  eg、使用者登入出生日期只能用2016-06-09的方式才能轉化成功,那麼2016/06/09就不能轉換成功所以就引出來我們的自訂類型轉換器

  1首先我們將做準備工作

    1)login.jsp註冊頁面  

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <base href="<%=basePath%>">        <title>註冊</title>     </head>    <body>    <form action="adduseraction" method="post">        使用者名稱:<input type="text" name="user.name"/><br/>        年齡:<input type="text" name="user.age"/><br/>        出生日期<input type="text" name="user.birthday"/><br/>            <input type="submit" value="提交"/>    </form>  </body></html>

  2)將準備成功頁面success.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><%@taglib uri="/struts-tags" prefix="s"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <base href="<%=basePath%>">        <title>成功頁面</title>      </head>    <body>    <s:property value="user.birthday"/>  </body></html>

  3)將準備實體類User

public class User {    private String name;    private String age;    private Date birthday;        //省略get和set}    

  4)將準備一個Action類

package cn.happy.action;import cn.happy.entity.User;import com.opensymphony.xwork2.ActionSupport;public class AddUserAction extends ActionSupport{    private User user;        @Override    public String execute() throws Exception {        System.out.println(user.getBirthday());        return SUCCESS;    }    public User getUser() {        return user;    }    public void setUser(User user) {        this.user = user;    }    }

  5)將準備AddUserAction-conversion.properties這個名字前部分AddUserAction要和Action類名相同;由於是局部的所以Action要和AddUserAction-conversion.properties放在同一個目錄

6)準備轉換器

package cn.happy.converter;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Map;import org.apache.struts2.util.StrutsTypeConverter;import com.opensymphony.xwork2.conversion.TypeConversionException;public class DateConverter extends StrutsTypeConverter {            private final DateFormat[] dfs={            new SimpleDateFormat("yyyy/MM/dd")    };    @Override    public Object convertFromString(Map context, String[] values, Class toType) {        String dateStr=values[0];//擷取日期的字串        for (int i = 0; i < dfs.length; i++) {            try {                return dfs[i].parseObject(dateStr);            } catch (ParseException e) {                                continue;            }        }        //如果遍曆完畢後仍沒有轉換成功,表明出現轉換異常        throw new TypeConversionException();            }    @Override    public String convertToString(Map context, Object obj) {                return new SimpleDateFormat("yyyy/MM/dd").format(obj);    }}

  7)準備一個adduseraction.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"    "http://struts.apache.org/dtds/struts-2.3.dtd"><struts >     <constant name="struts.devMode" value="true" />       <!--建立一個default包,繼承自Struts2的struts-default包  -->    <package name="default" namespace="" extends="struts-default">                            <action name="adduseraction" class="cn.happy.action.AddUserAction" >        <!-- 通過param參數設定儲存目錄路徑 -->                <result name="success">/Convert/success.jsp</result>        <result name="input">/Convert/login.jsp</result>        </action>                            </package>                </struts>

  8)在struts.xml引用一個adduseraction.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"    "http://struts.apache.org/dtds/struts-2.3.dtd"><struts >        </package> -->    <include file="adduseraction.xml"></include></struts>

二、全域自訂類型轉換器

在以上步驟下改

AddUserAction-conversion.properties--->複製到src的目錄下----->改名為xwork-conversion.properties--->在檔案裡

三、我們將在出生日期中如果出錯的話我們要給予提示!!!

  1)在全域變數的情況下我們首先要在改變類型轉換器添加

   new SimpleDateFormat("yyyy年MM月dd日")
package cn.happy.converter;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Map;import org.apache.struts2.util.StrutsTypeConverter;import com.opensymphony.xwork2.conversion.TypeConversionException;public class DateConverter extends StrutsTypeConverter {            private final DateFormat[] dfs={            new SimpleDateFormat("yyyy/MM/dd"),            new SimpleDateFormat("yyyy年MM月dd日")    };    @Override    public Object convertFromString(Map context, String[] values, Class toType) {        String dateStr=values[0];//擷取日期的字串        for (int i = 0; i < dfs.length; i++) {            try {                return dfs[i].parseObject(dateStr);            } catch (ParseException e) {                                continue;            }        }        //如果遍曆完畢後仍沒有轉換成功,表明出現轉換異常        throw new TypeConversionException();            }    @Override    public String convertToString(Map context, Object obj) {                return new SimpleDateFormat("yyyy/MM/dd").format(obj);    }}

 

  如果你頁面輸入錯誤會報一個錯誤就是欄位無效。-----》如何給英文欄位轉換給中文

在strurts.xml中配置 <constant name="struts.custom.i18n.resources" value="message"/>是國際化

在配置一個message.properties在根目錄src下

 

 這樣頁面報錯的就會顯示中文了

 

Struts2架構的自訂類型轉換器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.