Struts2 基本數據類型轉換的例子 詳解析
對int boolean double等Java基本數據類型,是struts2自帶的類型轉換攔截器自動完成類型轉換的,即"類型轉換"是由系統自動完成的。
最終目錄結構:

上源碼:
addMaterial.jsp:
<%@ page language="java" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- struts2標簽庫調用聲明 -->
<%@taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
<html>
<head>
<title>添加材料</title>
<s:head />
<sx:head />
</head>
<body>
<h3 align="left">
Struts2類型轉換使用范例
</h3>
<!-- 材料輸入表單 -->
<table>
<s:form id="materialForm" action="addMaterial">
<s:textfield name="material.material" label="材料名"></s:textfield>
<s:textfield name ="material.bid" label="價格"></s:textfield>
<s:textfield name ="material.mount" label="庫存量"></s:textfield>
<sx:datetimepicker name ="material.expireDate" label="過期日期"></sx:datetimepicker>
<s:submit value="提交"></s:submit>
</s:form>
</table>
</body>
</html> 注釋:表單form中action="addMaterial",即提交到此action處理,由struts.xml導航。注意傳遞的name為material.xxx。當然,要使material.xxx意義有效,在下面的Action類中必須定義setMaterial()方法實現'注入' 并定義Material類的相應xxx屬性。
struts.xml:
<?xml version="1.0" encoding="gb2312"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.i18n.encoding" value="GBK"/> <package name="Convert" extends="struts-default"> <action name="addMaterial" class="com.action.AddMaterialAction"> <result name="input">/jsp/addMaterial.jsp</result> <result name="success">/jsp/showMaterial.jsp</result> </action> </package> </struts>
注釋:配置文件struts.xml對頁面進行導航,匹配action:"addMaterial",交由Action類:AddMaterialAction.java實際處理,處理后導航到相應的結果頁面。
addMaterialAction.java:
package com.action;
import com.model.Material;
import com.opensymphony.xwork2.ActionSupport;
public class AddMaterialAction extends ActionSupport {
//屬性類型需要類型轉換的對象
private Material material;
public Material getMaterial() {
return material;
}
public void setMaterial(Material material) {
this.material = material;
}
public String execute() throws Exception {
return SUCCESS;
}
} 注釋:此Action類處理提交過來的表單數據。如<s:textfield name="material.bid" label="價格"></s:textfield>,如果在表單中填入的數據為"198.8",則是將name="material.bid",value="198.8" 提交給此Action類處理。通過setMaterial(Material material),將材料類Material的實例material的實例屬性bid的值設為"198.8"。
Material.java:
package com.model;
import java.util.Date;
public class Material implements java.io.Serializable {
// Fields
private String material;
private double bid;
private int mount;
private Date expireDate;
public Material() {
}
public double getBid() {
return bid;
}
public void setBid(double bid) {
this.bid = bid;
}
public int getMount() {
return mount;
}
public void setMount(int mount) {
this.mount = mount;
}
public String getMaterial() {
return this.material;
}
public void setMaterial(String material) {
this.material = material;
}
public Date getExpireDate() {
return expireDate;
}
public void setExpireDate(Date expireDate) {
this.expireDate = expireDate;
}
}
showMaterial.jsp:
<%@ page language="java" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- struts2標簽庫調用聲明 -->
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>添加材料</title>
<s:head />
</head>
<body>
<h3 align="left">
Struts2類型轉換使用范例
</h3>
<!-- 材料數據顯示 -->
<table>
材料名: <s:property value="material.material" ></s:property>
價格: <s:property value="material.bid" ></s:property>
庫存量: <s:property value="material.mount" ></s:property>
過期日期: <s:property value="material.expireDate" ></s:property>
</table>
</body>
</html> 注釋:注意value="material.xxx",因為Action類處理的是material實例,此處是通過material實例來訪問其屬性的。
轉換過程:在頁面按"提交"按鈕后,就相當于"setMaterial()"方法。在系統根據struts.xml配置文件執行Action之前,Struts2自帶的類型轉換攔截器就已經將Material對象中幾個屬性變量的類型由頁面上輸入時的String類型轉換為Material對象屬性變量被定義的數據類型。對數據處理完成后,在頁面上顯示數據時,是上述操作的逆過程,即完成數據原來的數據類型轉換為String類型,然后顯示于頁面上。
實際上在開發工作中,除非有根據特殊需求需要類型轉換之外,在Struts2中絕大部分類型轉換都已經由Struts2自己完成。
運行 http://localhost:8080/Convert/jsp/addMaterial.jsp :

“提交”后結果:

來自:http://blog.csdn.net/itzyjr/article/details/8459782