本文主要介紹struts2.3中的變量類型轉換,同時也涉及到一些通配符的設置操作。我們知道,從頁面上傳到後臺的數據都是以字符串的形式,不管是什麼樣的類型,例如日期、點座標的數據,有時某些數據是要轉換成一個對象的形式,所以這就涉及到類型問題。
在這之前,我首先要講一下struts2的一些簡單配置問題,第一步就是要引入相關資源文件。具體文件如下:
注意struts.xml應該放在類路徑下。
接下來,我們要在web.xml中配置該struts的過濾器,這個過濾器就是整個struts應用的入口,配置內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>teststruts2</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
過濾器配置好後,我們還要配置一個action,這個就是負責接收表單數據,頁面跳轉,調用後臺的業務邏輯和數據邏輯,就是一個連接model層和view層的橋樑。以座標點的類型轉換爲例說明。它的處理類如下 :
package com.ev.action;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import com.ev.point.Point;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class MyAction extends ActionSupport implements ServletRequestAware,ServletResponseAware{
private String username="aaa";
private String password;
private Point point;
public String showPoint(){
System.out.println(point.getX());
System.out.println(point.getY());
return "point";
}
public String form(){
ActionContext ac = ActionContext.getContext();
Map<String, Object> map = ac.getSession();
map.put("name",username);
return "home";
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Point getPoint() {
return point;
}
public void setPoint(Point point) {
this.point = point;
}
}
其配置內容在struts.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" />
<package name="default" namespace="/" extends="struts-default">
<!-- Add packages here -->
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="jsp_*_*" class="com.ev.action.MyAction" method="{2}">
<result name="{1}">
/WEB-INF/{1}.jsp
</result>
</action>
</package>
</struts>
接下來,還要配置一下轉換器代碼如下 :
package com.ev.conversion;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.ev.point.Point;
public class MyConversion extends StrutsTypeConverter {
@Override
public Object convertFromString(Map arg0, String[] obj, Class type) {
String[] arr = obj[0].split(",");
int x = Integer.parseInt(arr[0]);
int y = Integer.parseInt(arr[1]);
Point point = new Point();
point.setX(x);
point.setY(y);
return point;
}
@Override
public String convertToString(Map arg0, Object obj) {
Point point = (Point)obj;
String temp = "["+point.getX()+","+point.getY()+"]";
return temp;
}
}
該轉換器中的convertFromString方法就是將頁面中傳過來的字符參數轉換成相關對象形式本例以座標點對象爲例。其中第二個參數String[] obj就是從頁面上傳過來的。函數convertToString就是將相關對象轉成字符串形式,以便將對象的內容顯示在頁面中。在這個轉換器寫完後,我們還要在一個.properties配置文件中,指定action中哪個 屬性引用該轉換器。這個配置文件應該放在和相關action的同一個位置中。文件的命名規則爲:ActionName-conversion.properties,ActionName對應了action的名稱,但後面部是固定不變的。這樣才能被找到。文件內容爲:point=com.ev.conversion.MyConversion;point就是對應action中的point屬性,其值com.ev.conversion.MyConversion指定了引用的轉換器。
最後我們就可以運行一下該應用了。過程如下 :
首先模擬一下登陸操作如下圖:
點擊提交登陸成功後跳轉到下面的頁面
在該頁面中我們輸入2,3點擊提交後我們就可以看到結果了