浏览 4683 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-11-10
1,总共四五个功能模块; 2,每一个模块有两个页面:response和manage。其中均嵌入了border,可以使得页面在模块间转换; 3,所有功能模块通过各自的manage导入,具有查询功能, 引用 manageBI.html <input type="submit" jwcid="doQuery@Submit" listener="ognl:listeners.doQuery" value=" 查 询 "/> manageBI.java ResponseBI page = (ResponseBI)cycle.getPage("BI/ResponseBI"); cycle.activate(page); 将查询结果在response中显示; 4,response页面可显示查询信息,并可选择返回或是转入其它功能模块(通过border), 引用 responseBI.html
<span jwcid="@DirectLink" listener="listener:doBack"> response.java public void doBack(IRequestCycle cycle){ ManageBI page = (ManageBI)cycle.getPage("BI/ManageBI"); cycle.activate(page); } 5,border描述 引用 border.html
<input type="image" name="Image2" width="142" height="20" border="0" jwcid="BI@ImageSubmit" action="listener:ManageBI" image="asset:BI"/> border.java public void ManageBI(IRequestCycle cycle){ ManageBI bi = (ManageBI)cycle.getPage("BI/ManageBI"); cycle.activate(bi); } 6,页面间的参数通过Visit进行传递,无依赖关系。 产生的问题: 1,导入manage页面后可以实现在border功能; 2,在manage中输入查询项查询(1)若数据库中无此项,在response中可以通过border转入其它模块;(2)若数据库中 由此项,使用border报错。注意:使用response中doBack返回manage正确。所有模块均有此问题。 报错: org.apache.hivemind.ApplicationRuntimeException java.lang.NullPointerException com.satptr.view.bi.ResponseBI.setQueryterm(Unknown Source) com.satptr.view.bi.ResponseBI.pageBeginRender(Unknown Source) 。。。。。。。。。。。。。。。。。。 我不明白页面间并无参数依赖的关系,而且respoonse页面内部的doBack(IRequestCycle cycle)可以正确执行,同样的代码 在border中执行却不行。最让我郁闷的是,查询数据库返回的list为null时,border的功能就正常了。 另外,在manage中执行border完全正确。 请问各位:抛出的NullPointerException到底指的什么?是页面传递的问题吗?页面间传递时参数设置有何不妥吗? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-11-11
看不懂你在说什么。。。。。
哪个页面出错就放那个页面的完整代码(html,page,java),完整的错误提示。 |
|
返回顶楼 | |
发表时间:2005-11-12
不好意思,弄巧成拙了。
ResponseBI.java 引用 ...
public void pageBeginRender(PageEvent event){ ... this.setResponseList(biDAO.getQuery(bi_hql).list()); ... } ... public void doBack(IRequestCycle cycle){ ManageBI page = (ManageBI)cycle.getPage("BI/ManageBI"); cycle.activate(page); } ... ResponseBI.page 引用 <page-specification class="com.satptr.view.bi.ResponseBI">
<property-specification name="item" type="com.satptr.db.Basicinfo"/> </page-specification> ResponseBI.html 引用 <span jwcid="$Content$">
<span jwcid="@Border"> ... <tr jwcid="@For" element="tr" source="ognl:responseList" value="ognl:item" align="center"> ... <span jwcid="@DirectLink" listener="listener:doBack">返回人员信息管理</span> ... border.html 引用 ...
<form jwcid="form@Form"> ... <input type="image" name="Image2" width="142" height="20" border="0" jwcid="BI@ImageSubmit" action="listener:ManageBI" image="asset:BI"/> ... border.java 引用 ...
public void ManageBI(IRequestCycle cycle){ ManageBI bi = (ManageBI)cycle.getPage("BI/ManageBI"); cycle.activate(bi); } ... 其实是这样的,页面response用于显示查询的信息,当responseList不为null时,doBack()正常转入另外页面; border中ManageBI()却报错: org.apache.hivemind.ApplicationRuntimeException java.lang.NullPointerException com.satptr.view.bi.ResponseBI.setQueryterm(Unknown Source) com.satptr.view.bi.ResponseBI.pageBeginRender(Unknown Source) 。。。。。。。。。。。。。。。。。。 然而,若responseList为null时,border页面可正常跳转。 页面间无参数依赖,我不明白的是从resoponse跳转至别的页面时,为什么会调用com.satptr.view.bi.ResponseBI.pageBeginRender等?为什么我的responseBI调用会抛出NullPointerException |
|
返回顶楼 | |
发表时间:2005-11-13
顾名思义 pageBeginRender()
当然是要在页面显示的时候要运行了. |
|
返回顶楼 | |
发表时间:2005-11-14
我的意思是从A页面跳向B页面时,难道A页面也要执行一把pageBeginRender()吗?同时,A页面中的DirectLink可正确执行,但在border的ImageSubmit中的action,在相同代码下调用却出现错误,这又是为什么呢?
|
|
返回顶楼 | |
发表时间:2005-11-14
引用 我的意思是从A页面跳向B页面时,难道A页面也要执行一把pageBeginRender()吗?同时,A页面中的DirectLink可正确执行,但在border的ImageSubmit中的action,在相同代码下调用却出现错误,这又是为什么呢?
这确实tapestry的一种form rewind策略,是正确的。为了保证form在submit时数据no staleless,tapestry会先扫描一边所在页面的数据同步情况,也就是说,运行一边initialize(),pageBeginRender,pageEndRender,attach,detach等方法。。。所有,一般这种情况下,我不推荐在PageBeginRender里面对数据进行初始化赋值。比如你这里biDAO.getQuery(bi_hql).list(),就是在PageBeginRender方法里面与数据库逻辑层进行交互。。我觉得这种程序实现方式不合理。 而Border,虽然它在使用时,是页面嵌入border中,被border所包围。但是,首先它仍然是一个组件,作为页面中的众多组件之一被调用。那么页面在rewind的时候,自然会触发border中的PageBeginRender。 总之一句话,虽然Form在提交时与Directlink均触发同一种DirectService,但是他们的运作原理是不一样的。 |
|
返回顶楼 | |
发表时间:2005-11-14
楼上说得有道理,我们在pageBeginRender一般只是用来初始化对象
如果使用组件,最好传参数到组件里,组件再进行处理 最好不要在PageBeginRender转到别的页面或做别的逻辑处理 |
|
返回顶楼 | |