Struts2在進行輸入校驗與業務邏輯調用之前會先對界面傳來的數據進行類型轉化。像Action類中定義的int,String等基礎類型的屬性,只要其屬性名與JSP界面上的name屬性對應的值相同,則 Struts2自動會將其轉換。然而Struts2不會轉化對象類型。必須程序員自定義對象類型的轉換。
以下以Point點對象爲例來自定義對象類型的轉換。
此例我們在input.jsp中通過3個文本框輸入3個座標,返回到output.jsp中希望用一個文本框輸出3個座標。
前臺表單:input.jsp
struts.xml中配置:
處理類:
PointAction.java
定義類型轉換的配置:
Action類所在的同一包下建立PointAction-conversion.properties文件,(命名規則:Action類名-conversion.properties)
寫入如下一句即可:point=com.test.converter.PointConverter
相當於告知Struts2,若在PointAction類中碰到point這個非基礎屬性,則採用com.test.converter.PointConverter類中的方法來轉換
自定義的類型轉換類PointConverter.java如下:
Point.java
執行流程如下:當表單請求提交到PointAction類中時,Struts2通過各個屬性對應的setter方法將屬性值設置上去,一旦發現要設置的是個對象(此處爲Point對象),就去 PointAction- conversion.properties文件中尋找是否有自定義的Point對象類型的轉換。這裏我們在PointAction- conversion.properties中配置了point=com.test.converter.PointConverter,就告訴了 Struts2,遇到setPoint(Point point)不會轉時採納PointConverter類中定義的方法來轉換。PointConverter類中第一個方法將輸入的 3個字符串類型的座標轉換爲一個集合類型後返回,返回值就是PointAction中setPoint要設置的List<Point> point。第二個方法是將集合類型轉換爲字符串類型返回,當output.jsp中輸出座標時,實際上調用了PointAction的 List<Point> getPoint()方法,而此方法返回的List<Point>被換成了String類型,所以正常輸出。