Struts2中的Bean在提交时如何自动转型?
有这样的结构:
用户类User,属性有id,name,userType,userExtend
用户扩展类UserExtend,属性有user_id,remark
Teacher类继承于UserExtend,有属性bookName
Student类继承于UserExtend,有属性StudentCode
Action中定义了User,并在显示用户信息修改页面时,根据用户类型为User对象设置不同的userExtend
if(userType==1){
Teacher userExtend = new Teacher();
userExtend.setBookName("语文");
user.setUserExtend(userExtend);
}
else{
Student userExtend = new Student();
userExtend.setStudentCode("N001");
user.setUserExtend(userExtend);
}
在页面上,根据用户类型不同,显示不同修改页面
<s:textfield name="user.name"/>
<s:if test="user.userType==1">
<s:textfield name="user.userExtend.bookName"/>
</s:if>
<s:else>
<s:textfield name"user.userExtend.studentCode"/>
</s:else>
显示的时候,确实能根据用户类型的不同显示不同的修改界面。
但在提交的时候,struts2框架会自动调用User类的getUserExtend()方法
可是这个时候,userExtend属性是null,所以无法为userExtend的相应属性赋值。
而如果在User类中直接声明UserExtend userExtend = new UserExtend();的话,又不能满足Teacher和Student类型的私有属性赋值。
这种情况应该怎么办?
怎么能做到自动转型到Teacher或者Student?
用户类User,属性有id,name,userType,userExtend
用户扩展类UserExtend,属性有user_id,remark
Teacher类继承于UserExtend,有属性bookName
Student类继承于UserExtend,有属性StudentCode
Action中定义了User,并在显示用户信息修改页面时,根据用户类型为User对象设置不同的userExtend
if(userType==1){
Teacher userExtend = new Teacher();
userExtend.setBookName("语文");
user.setUserExtend(userExtend);
}
else{
Student userExtend = new Student();
userExtend.setStudentCode("N001");
user.setUserExtend(userExtend);
}
在页面上,根据用户类型不同,显示不同修改页面
<s:textfield name="user.name"/>
<s:if test="user.userType==1">
<s:textfield name="user.userExtend.bookName"/>
</s:if>
<s:else>
<s:textfield name"user.userExtend.studentCode"/>
</s:else>
显示的时候,确实能根据用户类型的不同显示不同的修改界面。
但在提交的时候,struts2框架会自动调用User类的getUserExtend()方法
可是这个时候,userExtend属性是null,所以无法为userExtend的相应属性赋值。
而如果在User类中直接声明UserExtend userExtend = new UserExtend();的话,又不能满足Teacher和Student类型的私有属性赋值。
这种情况应该怎么办?
怎么能做到自动转型到Teacher或者Student?
作者: wts 发布时间: 2011-06-08
你就不能画3个页面 要不然就自己从request取参数封装数据对象
作者: zn85600301 发布时间: 2011-06-08
我这里User,Teacher,Student就是举个例子,实际应用有10多个扩展,而且后期还可能有更多扩展。
如果弄那么页面,很不理想
如果弄那么页面,很不理想
作者: wts 发布时间: 2011-06-08