Struts 2データタイプ変換のカスタムデータタイプ変換
6873 ワード
前述のように、Java内蔵のint StringやDateなどに対しては、strutsがデータの変換を完了するのに役立ちますが、カスタムタイプに対しては、手動で変換方法を実現しなければなりません。
次は自分でUserオブジェクトの変換を実現します。
1.まずJava beanをカスタマイズします。package comp.test.beanを建てて、新しいクラスはUserです。
inputの内容はフォームです。
新しいpackage comp.test.com nverterの新しいタイプUserCoverterを作成します。
6.package converterの下に、新しいファイルを作成します。名前はUserAction-converter.propertiesです。
内容は一行だけです。
このファイルの命名規則と大文字と小文字に注意してください。
ブラウザを開いて、入力します。
ハローワールド
見られます
username:hello,password:world
以下の手順を分析します。
私たちはjspページでハローを入力します。worldの時、バックグランドserverは私達の配置ファイルによってUserActionに渡しますが、このUserは内蔵タイプではないので、UserAction-converter.propertiesという設定ファイルを通じてUser Coverterというクラスを見つけて、文字列をUserオブジェクトに変換します。
以下はstruts 2が提供するトランスポンダを採用し、流れを簡略化する。
次は自分でUserオブジェクトの変換を実現します。
1.まずJava beanをカスタマイズします。package comp.test.beanを建てて、新しいクラスはUserです。
package com.test.bean;
public class User
{
private String username;
private String password;
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;
}
}
2.input.jspとoutput.jspを設立する。inputの内容はフォームです。
<h1> username password</h1>
<form action="userAction.action">
<input type="text" name="user"> <br>
<input type="submit" name="submit">
</form>
out putの内容は:<s:property value="user"/>
ここではstrutsのカスタムラベルを使用していますので、上から2番目の行には下記のように追加します。<%@ taglib prefix="s" uri="/struts-tags" %>
3.struts.xmlにルート表を配置する:<action name="userAction" class="com.test.action.UserAction">
<result name="success">/output.jsp</result>
</action>
4.UserActionを作成する:package com.test.action;
import com.opensymphony.xwork2.ActionSupport;
import com.test.bean.User;
public class UserAction extends ActionSupport
{
private static final long serialVersionUID = 1L;
private User user;
public User getUser()
{
return user;
}
public void setUser(User user)
{
this.user = user;
}
@Override
public String execute() throws Exception
{
System.out.println("username : " + user.getUsername());
System.out.println("password : " + user.getPassword());
return SUCCESS;
}
}
5.以下から本格的な変換を開始します。新しいpackage comp.test.com nverterの新しいタイプUserCoverterを作成します。
package com.test.converter;
import java.util.Map;
import java.util.StringTokenizer;
import ognl.DefaultTypeConverter;
import com.test.bean.User;
public class UserConverter extends DefaultTypeConverter
{
@Override
public Object convertValue(Map context, Object value, Class toType)
{
if (User.class == toType) // User
{
String[] str = (String[]) value;
String firstValue = str[0];
StringTokenizer st = new StringTokenizer(firstValue, ";");
String username = st.nextToken();
String password = st.nextToken();
User user = new User();
user.setUsername(username);
user.setPassword(password);
return user;
}
else if (String.class == toType)// User
{
User user = (User) value;
String username = user.getUsername();
String password = user.getPassword();
String userInfo = "username: " + username + ", password: "
+ password;
return userInfo;
}
return null;
}
}
私たちのトランスケタ類は、ognlから提供されたDefault Type Coverter類を継承しているように見えます。6.package converterの下に、新しいファイルを作成します。名前はUserAction-converter.propertiesです。
内容は一行だけです。
user=com.test.converter.UserConverter
UserActionのメンバー変数userを変換するには、comp.test.co nverter.UserCoverterというクラスを使うべきだという意味です。このファイルの命名規則と大文字と小文字に注意してください。
ブラウザを開いて、入力します。
http://localhost:8080/struts2/input.jsp
入力:ハローワールド
見られます
username:hello,password:world
以下の手順を分析します。
私たちはjspページでハローを入力します。worldの時、バックグランドserverは私達の配置ファイルによってUserActionに渡しますが、このUserは内蔵タイプではないので、UserAction-converter.propertiesという設定ファイルを通じてUser Coverterというクラスを見つけて、文字列をUserオブジェクトに変換します。
以下はstruts 2が提供するトランスポンダを採用し、流れを簡略化する。