说明:在页面中输入的都是字符串。而在Java在处理时习惯使用对象。需要将页面的输入的字符串转换成java对象后然后再进行后续的处理。
例1:页面上输入的用户信息。用户名和密码使用分号隔开。
页面内容: user info: hello;world
结果输出为:username: hello passworld: world
a. 登录界面userinfo.jsp
<h1>使用分号将用户名和密码分开</h1>
<formaction="userAction">
user info : <inputtype="text"name="user"/><br/>
<inputtype="submit"value="submit"/>
</form>
b. 定义待转换的bean类User.
classUser{
//定义属性名
//定义get(),set()方法。
}
c. 配置文件struts.xml.配置action对应的类
<actionname="userAction"class="com.ebuair.UserAction">
<resultname="success">/showuserinfo.jsp</result>
</action>
d. 新建com.ebuair.UserAction.(继承ActionSupport类)
publicclass UserAction extends ActionSupport{
private User user; //注意这里一定不能新建new User()对象
//生成get(),set()方法
//重写execute()方法
}
e.定义类型转换器com.ebuair.converter.UserConverter.
(继承DefaultTyepeConverter)
重写convertValue(Mapcontext,Object value,Class toType)
public classUserConverter extends DefaultTypeCoverter{
@override
convertValue(Map context,Object value,ClasstoType){
if(User.class == toType){//从页面向后台转换}
else if(String.class = toType){//从后台向页面转换}
}
}
e. 定义属性文件。规则:必须在action包下。本例为:com.ebuair
文件名为action名-conversion.properties。
(这个也是开始学习时最容易出错的地方)
本例为:UserAction-conversion.properties
文件内容 待转换的类对象=类型转换器的所在的包路径
本例为:user= com.ebuair.converter.UserConverter.
类型转换器可以直接继承DefaultTypeConverter类,重写convertValue()方法,可以实现类型转换。还可以直接继承StrutsTypeConverter类,重写convertFromString(Map arg0,String[] arg1,Class args2)和converToString(Map arg0,Object arg1)
StrutsTypeConver对DefaultTypeConverter类的convertValuea()方法进行了封装。
f.展示页面:showuserinfo.jsp(使用)
<@ taglib prefix=”s” uri=”/struts-tags”>
<s:property value=”user”/>
例2.批量的类型转换。
a. 登录界面userinfos.jsp
<form action=”userActions”>
user info1: <input type=”text” name=”user”><br>
user info2: <input type=”text” name=”user”><br>
……
<input type=”submit” value=”submit”>
</form>
b. 配置sruts.xml。配置指定的action
<actionname=”userActions” class=”com.ebuair.UserAcions”>
<result name=”successs”>/showuserinfos.jsp</result>
</action>
c. 实现com.ebuair.UserAcions类 (继承ActionSupport类)
publicclass UserActions extends ActionSupport{
List<User> user //注意不能使用new生成新的对象。
//生成set(),get()方法
//重写execute()方法
}
d. 实现类转换器com.ebuair.converter.UserActionsConverter
(继承StrutsTypeConverter)
publicclass UserActionsConverter extends StrutsTypeConverter{
@override
public Object converFromString(Map context, String[]vaules, Class toClass){
//为什么不用判断toClass==User.class
List<User> users = newArrayList<User>();
for(){ }
return users;
@override
publicString convertToString(Map contex,Object o){
List<User> users = (List<User>) o;
StringBuffer userinfo = new StringBuffer();
for(User user : users){
userinfo.append(“username:”).append(username).append(“password”).append(“password”);
}
return userinfo.toString();
}
}
}
e. 配置属性文件。
在和Action类相同的包下定义文件
(本例为在com.ebuair包下新建文件)
文件名称为Action类名-conversion.properties
(本例为UserActions-conversion.propeties)
内容为带转换的类名=类转化器名()
(本例为user=com.ebuair.converter.UserAciontsConverter)