1. 程式人生 > >struts2的常量、動態方法呼叫、接受請求引數處理、型別轉換 .

struts2的常量、動態方法呼叫、接受請求引數處理、型別轉換 .

struts2的常量動態方法呼叫接受請求引數處理型別轉換常見的struts常量http://localhost:8080/struts_action/login.action為什麼是.action 並且.action能不能修改struts2-core-2.3.8.jarorg.apache.strut2.default.properties 檔案中找到字尾為.action的配置常量 struts.action.extension=action,,

能不能修改?在哪裡修改?struts.xmlstruts.properties細說常量:常量可以在struts.xmlstruts.properties

中配置,建議在struts.xml中配置,兩種配置方式如下:struts.xml檔案中配置常量<struts><constant name="struts.action.extension" value="do"/></struts>

struts.properties中配置常量struts.action.extension=do

因為常量可以在下面多個配置檔案中進行定義,所以我們需要了解struts2載入常量的搜尋順序:struts-default.xmlstruts-plugin.xmlstruts.xmlstruts.propertiesweb.xml

如果在多個檔案中配置了同一個常量,則後一個檔案中配置的常量值會覆蓋前面檔案中配置的常量值.

Struts2 UI主題 :xthml simple ajax 預設的時xthml

注意:struts2spring進行整合 struts2hibernate整合<!– spring整合時,指定由spring負責action物件的建立 --><constant name="struts.objectFactory" value="spring" />Struts2 預設支援 動態方法呼叫動態方法呼叫的 常量配置:<!該屬性設定Struts 2是否支援動態方法呼叫,該屬性的預設值是

true。如果需要關閉動態方法呼叫,則可設定該屬性為false。 --><constant name="struts.enable.DynamicMethodInvocation" value="false"/>

檔案上傳:<!--上傳檔案的大小限制--> 1kb<constant name="struts.multipart.maxSize" value=1024"/>

使用萬用字元 :

struts.xml文中

必須理解:

第一個*代表的是類名第二個*代表的是方法名

這樣會導致 <result name=會有n個名稱>接受請求引數處理

採用基本型別接收請求引數(get/post)Action類中定義與請求引數同名的屬性,struts2便能自動接收請求引數並賦予給同名屬性。請求路徑: http://localhost:8080/test/view.action?id=78public class ProductAction {private Integer id;public void setId(Integer id) {//struts2通過反射技術呼叫與請求引數同名的屬性的setter方法來獲取請求引數值this.id = id;}public Integer getId() {return id;}}採用複合型別接收請求引數請求路徑: http://localhost:8080/test/view.action?product.id=78public class ProductAction {private Product product;public void setProduct(Product product) { this.product = product; }public Product getProduct() {return product;}}Struts2首先通過反射技術呼叫Product的預設構造器建立product物件,然後再通過反射技術呼叫product中與請求引數同名的屬性的setter方法來獲取請求引數值。

型別轉換

自定義型別轉換器:java.util.Date型別的屬性可以接收格式為2009-07-20的請求引數值。但如果我們需要接收格式為20091221的請求引數,我們必須定義型別轉換器,否則struts2無法自動完成型別轉換。

import java.util.Date;public class HelloWorldAction {private Date createtime;

public Date getCreatetime() {return createtime;}

public void setCreatetime(Date createtime) {this.createtime = createtime;}}

public class DateConverter extends DefaultTypeConverter {@Override public Object convertValue(Map context, Object value, Class toType) {SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");try { if(toType == Date.class){//當字串向Date型別轉換時String[] params = (String[]) value;// Request.getParameterValues() return dateFormat.parse(params[0]);}else if(toType == String.class){//Date轉換成字串時Date date = (Date) value;return dateFormat.format(date);}} catch (ParseException e) {}return null;}}將上面的型別轉換器註冊為區域性型別轉換器:Action類所在的包下放置ActionClassName-conversion.properties檔案,ActionClassNameAction的類名,後面的-conversion.properties是固定寫法,對於本例而言,檔案的名稱應為HelloWorldAction-conversion.properties 。在properties檔案中的內容為:屬性名稱=型別轉換器的全類名對於本例而言, HelloWorldAction-conversion.properties檔案中的內容為:createtime= cn.csdn.conversion.DateConverter

將上面的型別轉換器註冊為全域性型別轉換器:WEB-INF/classes下放置xwork-conversion.properties檔案 。在properties檔案中的內容為:待轉換的型別=型別轉換器的全類名對於本例而言, xwork-conversion.properties檔案中的內容為:java.util.Date= cn.csdnconversion.DateConverter