浏览 5335 次
锁定老帖子 主题:使用模型驱动模式,页面无法显示数据的问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-07-22
public class PersonAction extends ActionSupport implements Action,ModelDriven{ private Person person= new Person();; public Object getModel(); { return person; } public String doProperty();{ String id = (String); ServletActionContext.getRequest();.getParameter("id");; person=personBO.doGetPerson(Integer.parseInt(id););; return "doProperty"; } } jsp也面, <ww:property value="personId"/> <ww:property value="name"/> xwork.xml <interceptors> <interceptor name="reference-resolver" class="com.opensymphony.xwork.interceptor.ExternalReferencesInterceptor" /> <interceptor-stack name="WSStack"> <interceptor-ref name="model-driven" /> <interceptor-ref name="params" /> <interceptor-ref name="reference-resolver" /> </interceptor-stack> </interceptors> <action name="person" class="com.oss.ww2.sample.web.ww2.action.PersonAction" > <external-ref name="personBO">personBO</external-ref> <result name="doProperty" type="dispatcher"> <param name="location">/person/personProperty.jsp</param> </result> <interceptor-ref name="WSStack" /> </action> 为什么页面上总是显示不出数据呀。改用字段驱动就一切正常了。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-07-22
出错的页面?
|
|
返回顶楼 | |
发表时间:2005-07-24
页面没有问题。
把 Person对象变成Public的,然后页面上 <ww:property value="person.personId"/> 就好了。不知道为什么 |
|
返回顶楼 | |
发表时间:2005-07-25
引用 <ww:property value="person.personId"/>
//ModelDriven & person.personId getModel().getPerson.getPersonId() ==>person.getPerson.getPersonId() 还能正确显示? |
|
返回顶楼 | |
发表时间:2005-07-25
没写getPerson()啊,代码里写的又是getModel()
|
|
返回顶楼 | |
发表时间:2005-08-03
页面中改成下面这样试试
<ww:property value="model.personId"/> <ww:property value="model.name"/> |
|
返回顶楼 | |
发表时间:2005-08-09
倒不是猜想,只是分析错了
![]() |
|
返回顶楼 | |
发表时间:2005-08-09
javamaker 写道 页面中改成下面这样试试
<ww:property value="model.personId"/> <ww:property value="model.name"/> 这样应该是对的,取值的用model.xxxx,设值直接用xxxx 模型驱动是在action执行之前,把model(即new Person();产生的对象);压入stack的。 引用: person=personBO.doGetPerson(Integer.parseInt(id););; 这句代码中person已经指向另一个Object了,stack中的person仍然是初始化时new Person();产生的那个对象,值当然为空了。 解决方法:BeanUtils.copyProperties(); 你是在猜想吧,model driven没这么弱,原来的写法是对的。前提是model在params的interceptor之前 |
|
返回顶楼 | |
发表时间:2006-11-09
强烈同意楼上的观点,本人曾遇到过同样的问题,能过debug发现
页面得到的person(这里以楼主的代码做类)的对象与 我曾在这句这前打过一句 log.print(person) //1 person=personBO.doGetPerson(Integer.parseInt(id)); 之后也打了一句. log.print(person)//2 发现二者对象不一致,而debug提示中页面的赋值对象名与1中的对象名一致,这证实了楼上滴观点.不过本人当时的办法比较笨,没有想到beanutils竟然是一个一个属性set出来的.汗~~~~~~~~~. 忘记补充一点了.. 如果person中有个set类型,或其它pojo的对象,并且碰到用hibernate时的延迟加载时,对不起,你还是只能用person.setF1(bean.getF1)这种笨方法,否则你在用beanutils.copyProperty()方法时,会出现org.hibernate.LazyInitializationException:的错误~~~ |
|
返回顶楼 | |