| 網(wǎng)站首頁 | 關(guān)于我們 | 開發(fā)優(yōu)勢 | 產(chǎn)品展示 |
| 合作企業(yè) | 新聞動態(tài) | 聯(lián)系我們 | 電話聯(lián)系 |
文章作者:濟(jì)南軟件開發(fā) 時(shí)間:2016年11月08日
自定義類型轉(zhuǎn)換器的作用就是將struts無法識別的類型轉(zhuǎn)換成自己所需要的.
比如輸入:廣東-東莞-虎門,對應(yīng)的輸出時(shí)能輸出:廣東省 東莞市 虎門(鎮(zhèn)/區(qū))
這里涉及到的知識點(diǎn)即是將String轉(zhuǎn)換為任意的JavaBean類型.
一.實(shí)現(xiàn)代碼
程序配置入口:struts.xml
復(fù)制代碼
<?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>
<!--<include file="config/upload.xml"></include> -->
<!-- 加載其他配置文件 -->
<!-- <include file="config/upload-interceptor.xml"></include> -->
<!-- 加載屬性文件-國際化 -->
<!-- <constant name="struts.custom.i18n.resources" value="message"></constant> --> <!-- 結(jié)果集 -->
<!-- <include file="config/result_struts.xml"></include> -->
<!-- 類型轉(zhuǎn)換 -->
<include file="config/type_struts.xml"></include>
<!-- 文件下載 -->
<!-- <include file="config/download_struts.xml"></include> -->
</struts>
復(fù)制代碼
注:struts.xml是在項(xiàng)目運(yùn)行的過程中被加載進(jìn)入內(nèi)存的,是項(xiàng)目配置的總?cè)肟?這里使用<include>屬性加載外部的type_struts.xml
type_struts.xml
復(fù)制代碼
<?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 name="type" extends="struts-default">
<action name="TypeAction" class="type.TypeAction" method="execute">
<result name="success" type="dispatcher">
/WEB-INF/type_success.jsp
</result>
<result name="input" type="dispatcher">
type.jsp
</result>
</action>
</package> -->
<package name="type" extends="struts-default">
<action name="TypeSelfAction" class="type.TypeSelfAction" method="execute">
<result name="success" type="dispatcher">
/WEB-INF/type_self_success.jsp
</result>
<result name="input" type="dispatcher">
/type_self.jsp
</result>
</action>
</package>
</struts>
復(fù)制代碼
注:type_struts.xml是具體負(fù)責(zé)類型轉(zhuǎn)換時(shí)的配置,這里配置了對應(yīng)的type.TypeSelfAction,以及成功后的跳轉(zhuǎn)頁面type_self_success.jsp和程序出錯(cuò)時(shí)
的跳轉(zhuǎn)頁面type_self.jsp,并將消息回顯.
type_self.jsp
復(fù)制代碼
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<s:form action="TypeSelfAction" type="POST">
<s:textfield label="用戶名" name="username" />
<s:password label="密碼" name="password" />
<s:textfield label="薪水" name="salary" />
<s:textfield label="生日" name="birthday"/>
<s:textfield label="地址" name="address"/>
<s:submit value="提交" name="submit"/>
<s:reset value="重置"/>
</s:form>
</body>
</html>
復(fù)制代碼
注:type_self.jsp 是用戶訪問項(xiàng)目的入口,效果圖如下所示:
其中使用POST請求方式是為了避免中文亂碼等問題,使用struts自帶的標(biāo)簽,如s:password,s:textfield等是為了簡化開發(fā),并且使錯(cuò)誤消息方便回顯.
TypeSelfAction.java
View Code
注:TypeSelfAction是一個(gè)與配置文件type_struts.xml相對應(yīng)的JavaBean文件.
Address.java
View Code
注:Address是關(guān)于地址的JavaBean,其分為省份,市,區(qū)域三級.
為了實(shí)現(xiàn)自定義類型轉(zhuǎn)換還必須實(shí)現(xiàn)StrutsTypeConverter的擴(kuò)展,這里要手動寫兩個(gè)方法將JavaBean轉(zhuǎn)為String和將String轉(zhuǎn)為JavaBean.
TypeAddressConverter.java
復(fù)制代碼
package type;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
/**
* @ClassName: TypeAddressConverter
* @Description: 自定義類型轉(zhuǎn)換器,繼承自StrutsTypeConverter,可以將String轉(zhuǎn)換成任意javaBean對象
* @author: amosli
* @email:amosli@infomorrow.com
* @date Feb 13, 2014 11:42:42 PM
*/
public class TypeAddressConverter extends StrutsTypeConverter {
public TypeAddressConverter() {
System.out.println("constructor!");
}
//將String轉(zhuǎn)為對象返回
public Object convertFromString(Map context, String[] values, Class toClass) {
System.out.println("convertFromString");
// System.out.println("context:"+context);
// System.out.println("class:"+toClass);
// System.out.println("values:"+Arrays.toString(values));
if (Address.class == toClass) {// 判斷類型是否為將要轉(zhuǎn)成的JavaBean
String[] split = values[0].toString().split("-");//頁面中的字符串,下標(biāo)為0表示第一個(gè)字符串,這里如果有多個(gè)可以依此類推.
String province = split[0];// 省份
String city = split[1];// 市
String area = split[2];// 區(qū)
Address address = new Address(province, city, area);
return address;
}
return null;
}
//將對象轉(zhuǎn)為String返回
public String convertToString(Map context, Object o) {
System.out.println("convertToString");
if (o instanceof Address) {// 判斷對象類型是否為Adress
Address adr = (Address) o;
return adr.toString();
}
return null;
}
}
復(fù)制代碼
注:這里是自定義類型轉(zhuǎn)換的核心代碼,即如何將一個(gè)JavaBean轉(zhuǎn)為String和將String轉(zhuǎn)為JavaBean.
為了調(diào)用上面的方法還必須加一個(gè)配置.
xwork-conversion.properties
#JavaBean=self defined typeconverter
type.Address=type.TypeAddressConverter
想要了解更多詳情歡迎來電咨詢18678812288
登陸網(wǎng)址:m.h6244.cn。
聯(lián)系人:王經(jīng)理。