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?

作者: wts   发布时间: 2011-06-08

你就不能画3个页面 要不然就自己从request取参数封装数据对象

作者: zn85600301   发布时间: 2011-06-08

我这里User,Teacher,Student就是举个例子,实际应用有10多个扩展,而且后期还可能有更多扩展。
如果弄那么页面,很不理想

作者: wts   发布时间: 2011-06-08