Struts2中的類型轉換

來源:互聯網
上載者:User

 局部變數類型轉換

我們看下面代碼,InputAction中有一個屬性point ,是PointBean類型

要做到針對point屬性的轉換,也就是 字串->對象  對象->字串

package cn.zhao.action;</p><p>import java.util.Date;</p><p>import com.opensymphony.xwork2.ActionSupport;</p><p>public class InputAction extends ActionSupport<br />{<br />private static final long serialVersionUID = 1L;<br />private String name ;<br />private int age ;<br />private Date date ;<br />private PointBean point ;</p><p>public String getName()<br />{<br />return name ;<br />}</p><p>public void setName( String name )<br />{<br />this.name = name ;<br />}</p><p>public int getAge()<br />{<br />return age ;<br />}</p><p>public void setAge( int age )<br />{<br />this.age = age ;<br />}</p><p>public Date getDate()<br />{<br />return date ;<br />}</p><p>public void setDate( Date date )<br />{<br />this.date = date ;<br />}</p><p>public PointBean getPoint()<br />{<br />return point ;<br />}</p><p>public void setPoint( PointBean point )<br />{<br />this.point = point ;<br />}</p><p>@Override<br />public String execute() throws Exception<br />{<br />return SUCCESS ;<br />}</p><p>@Override<br />public void validate()<br />{<br />if( this.name == null || "".equals( this.name ) )<br />{<br />this.addFieldError( "name", "對不起,姓名必須填寫!" ) ;<br />}</p><p>if( this.date == null || "".equals( this.date ) )<br />{<br />this.addFieldError( "date", "對不起,日期必須填寫!" ) ;<br />}<br />}</p><p>}<br />

 

給出PointBean代碼

package cn.zhao.action;</p><p>public class PointBean<br />{<br />private int x ;<br />private int y ;</p><p>public int getX()<br />{<br />return x ;<br />}</p><p>public void setX( int x )<br />{<br />this.x = x ;<br />}</p><p>public int getY()<br />{<br />return y ;<br />}</p><p>public void setY( int y )<br />{<br />this.y = y ;<br />}<br />}<br />

 

首先,要在InputAction類的同包目錄下建立名為InputAction-conversion.properties的資源檔

InputAction-conversion.properties這個屬性 中劃線前面是指類的名字,線後是固定名稱。

然後在其中進行配置,表明要轉換的屬性,目前只有這一行,

point=cn.zhao.action.conver.PointConvert

point是指InputAction中的屬性名稱,等號後面的內容是指標對些較換的具體實作類別

下面,我們給出轉換類代碼 

 

 

 package cn.zhao.action.conver;</p><p>import java.util.Map;</p><p>import cn.zhao.action.PointBean;</p><p>import ognl.DefaultTypeConverter;</p><p>public class PointConvert extends DefaultTypeConverter<br />{</p><p>@Override<br />public Object convertValue( Map context , Object value , Class toType )<br />{<br />if( String.class == toType )<br />{<br />PointBean bean = ( PointBean ) value ;<br />StringBuffer sb = new StringBuffer() ;<br />sb.append( "[" ) ;<br />sb.append( String.valueOf( bean.getX())) ;<br />sb.append( String.valueOf( bean.getY())) ;<br />sb.append( "]" ) ;<br />return sb.toString() ;<br />}<br />else if ( PointBean.class == toType )<br />{<br />PointBean bean = new PointBean() ;<br />String[] strs = ( String[] )value ;<br />String[] parms = ( String[] ) strs[0].split( "," ) ;<br />bean.setX( Integer.parseInt( parms[ 0 ] ) ) ;<br />bean.setY( Integer.parseInt( parms[ 1 ] ) ) ;<br />return bean ;<br />}</p><p>return null ;<br />}</p><p>}<br />

 

 代碼中首先根據要轉換的目的類型進行判斷if( String.class == toType ),然後執行相應的轉碼

 

轉換類還有另一種寫法,繼承StrutsTypeConverter,實現其中的兩個方法convertFromString

convertToString

下面給出代碼

package cn.zhao.action.conver;</p><p>import java.util.Map;</p><p>import org.apache.struts2.util.StrutsTypeConverter;</p><p>import cn.zhao.action.PointBean;</p><p>public class CommonTypeConverPoint extends StrutsTypeConverter<br />{</p><p>@Override<br />public Object convertFromString( Map context, String[] values, Class toClass )<br />{<br />PointBean bean = new PointBean() ;<br />String[] parms = ( String[] ) values[0].split( "," ) ;<br />bean.setX( Integer.parseInt( parms[ 0 ] ) ) ;<br />bean.setY( Integer.parseInt( parms[ 1 ] ) ) ;</p><p>return bean ;<br />}</p><p>@Override<br />public String convertToString( Map context, Object o )<br />{<br />PointBean bean = ( PointBean ) o ;<br />StringBuffer sb = new StringBuffer() ;</p><p>sb.append( "[ x = " ) ;<br />sb.append( String.valueOf( bean.getX())) ;<br />sb.append( " y = " ) ;<br />sb.append( String.valueOf( bean.getY())) ;<br />sb.append( " ]" ) ;</p><p>return sb.toString() ;<br />}</p><p>}<br />

 

 

以上部分是局部類型轉換,可以看出是針對某一個Action中的成員進行轉換

下面介紹全域類型轉換。

在classes下建立xwork-conversion.properties,名稱固定!

設定檔中寫入如下內容

cn.zhao.action.PointBean = cn.zhao.action.conver.CommonTypeConverPoint

等號前面,是指要轉換的類型,等號後面,是指相應的轉換類,此處我們使用了第二種轉換方式

這樣,在整個系統中,只要碰到PointBean類型的成員,便調用CommonTypeConverPoint類來轉換,做到了

不受類的束縛,可以自由轉換。

 

下面再介紹一種比較常用的轉換方式,如果InputAction中有一個 private List<PointBean> points ;這樣的成員

那麼,轉換類中應考慮迴圈

package cn.zhao.action.conver;</p><p>import java.util.ArrayList;<br />import java.util.List;<br />import java.util.Map;</p><p>import org.apache.struts2.util.StrutsTypeConverter;</p><p>import cn.zhao.action.PointBean;</p><p>public class CommonListTypeConverPoint extends StrutsTypeConverter<br />{</p><p>@Override<br />public Object convertFromString( Map context, String[] values, Class toClass )<br />{<br />List<PointBean> list = new ArrayList<PointBean>() ;</p><p>for( String v : values )<br />{<br />PointBean bean = new PointBean() ;<br />String[] params = v.split( "," ) ;<br />bean.setX( Integer.parseInt( params[ 0 ] ) ) ;<br />bean.setY( Integer.parseInt( params[ 1 ] ) ) ;<br />list.add( bean ) ;<br />}</p><p>return list ;<br />}</p><p>@Override<br />public String convertToString( Map context, Object o )<br />{<br />List<PointBean> list = (List<PointBean>) o ;<br />StringBuilder sb = new StringBuilder() ;<br />sb.append( " [ " ) ;</p><p>for( PointBean bean : list )<br />{<br />sb.append( " x= " ) ;<br />sb.append( bean.getX() ) ;<br />sb.append( " y = " ) ;<br />sb.append( bean.getY() ) ;<br />}</p><p>sb.append( " ] " ) ;</p><p>return sb.toString() ;<br />}</p><p>}<br />

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.