簡單來說 執行繼承StrutsTypeConverter的類型轉換時, 頁面向后臺傳數據執行convertFromString(), 后臺向前臺傳數據執行convertToString()
類型轉換的詳細流程 1、用戶進行請求,根據請求名在struts.xml中尋找Action 2、在Action中,根據請求域中的名字去尋找對應的set方法。找到后在賦值之前會檢查這個屬性有沒有自定義的類型轉換。沒有的話,按照默認進行轉換;如果某個屬性已經定義好了類型轉換,則會去檢查在Action同一目錄下的action文件名-conversion.PRoperties文件(局部)和src下xwork-conversion.properties文件(全局)(同時存在后者優先)。 3、從文件中找到要轉換的屬性及其轉換類。 4、然后進入轉換類中,在此類中判斷轉換的方向。我們是先從用戶請求開始的,所以這時先進入從字符串到類的轉換。返回轉換后的對象。流程返回Action。 5、將返回的對象賦值給Action中的屬性,執行Action中的execute() 6、執行完execute()方法,根據struts.xml的配置轉向頁面 7、在jsp中顯示內容時,根據頁面中的屬性名去調用相應的get方法,以便輸出 8、在調用get方法之前,會檢查有沒有此屬性的自定義類型轉換。如果有,再次跳轉到轉換類當中。 9、在轉換類中再次判斷轉換方向,進入由類到字符串的轉換,完成轉換后返回字符串。 10、將返回的值直接帶出到要展示的頁面當中去展示。
1、Point.java
//普通pojo類 private int x; private int y; public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } @Override public String toString() { // TODO 自動生成的方法存根 return "(" + x + ", " + y + ")"; }2、Pointaction.java (這有個辛酸的事)
/*注意這里不能接口ModelDriven!!!我就是接了,各種找代碼,各種百度,又重寫了4遍,現在第5遍才發現了不能接口的問題,雖然不知道為什么... */public class Pointaction extends ActionSupport { private Point point; public Point getPoint() { return point; } public void setPoint(Point point) { this.point = point; } @Override public String execute() throws Exception { // TODO 自動生成的方法存根 return SUCCESS; }}3、Pointconverter.java
//此方法主要是 繼承StrutsTypeConverterpublic class Pointconverter extends StrutsTypeConverter{ //重寫 @Override public Object convertFromString(Map arg0, String[] arg1, Class arg2) { // TODO 自動生成的方法存根 System.out.println("you in converter"); //根據自己需要來寫 Point point=new Point(); String x=arg1[0].split(",")[0]; String y=arg1[0].split(",")[1]; point.setX(Integer.parseInt(x)); point.setY(Integer.parseInt(y)); return point; } //重寫 @Override public String convertToString(Map arg0, Object arg1) { // TODO 自動生成的方法存根 Point point = (Point)arg1; return "("+point.getX()+","+point.getY()+")"; }}4、xwork-conversion.properties(需要和struts.xml同一個目錄下即src)
//(包名+類名) 需要轉換的類 = 類型轉換器類com.po.Point=com.converter.Pointconverter5、struts.xml
<action name="point" class="com.dao.Pointaction"> <result>/success.jsp</result> <result name="input">/login.jsp</result> </action>6、login.jsp
<form action="point" method="post"> 坐標:<input type="text" name="point"><br> <input type="submit" value="提交"> </form>7、success.jsp
<h1>坐標為${point}</h1>8、效果圖
新聞熱點
疑難解答