圈子首页 java JSF 论坛

请问jsf中第一次页面显示时,数据什么时候绑定

fourfire 2008-04-10
我在做一个翻页的控件,在datatable下增加
<f:facet name="footer">
								<h:panelGrid>
								<h:commandLink value="首页" styleClass="Link" actionListener="#{ManageBean.firstPage}">
								</h:commandLink>
								<h:commandLink value="上一页" styleClass="Link" actionListener="#{ManageBean.lastPage}">
								</h:commandLink>
								<h:commandLink value="下一页" styleClass="Link" actionListener="#{ManageBean.nextPage}">
								</h:commandLink>
								<h:commandLink value="末页" styleClass="Link" actionListener="#{ManageBean.endPage}">
								</h:commandLink>
								<h:outputText value="共计#{ManageBean.otherDataModel.rowTotalCount}条记录" />
								<h:outputText value="第#{ManageBean.otherDataModel.currentPage+1}页/共#{ManageBean.otherDataModel.pageCount}页" />
								<h:commandLink value="导出" styleClass="Link" actionListener="#{ManageBean.exportExcel}">
								</h:commandLink>
								</h:panelGrid>
</f:facet>

我在render中获得数据,但是第一次打开页面时总记录数为0.点翻页就ok了
我猜想是显示footer的时候,记录数还未得到。我在encodeBegin中获得数据
请问:在什么方法中获得数据,可以保证在footer渲染前调用?
dr.han 2008-04-10
页面初始化的时候,JSF首先会调用业务manageBean的属性的get/set方法,而这时你的数据List是空的,所以没有数据
建议你在页面开始先查询数据,或者把查询数据的方法写到你一个属性的get方法中即可
glacier3 2008-04-10
我觉得没有必要使用JSF了,除非一些其他的情况, 不使用是最好的解决办法
ltian 2008-04-11
JSF1.1规范上说,当JSF页面第一次请求,则直接从restore view阶段进入render view阶段,在render阶段,所有的控件属性的getter方法会被调用,从而使得JSF视图可以被生成和render.所以在JSF中应该这样写getter方法(比如想从数据库取个列表):
class MyBackBean
{
  private List userList=null;
   public  getUserList():List
   {
       if (this.userList==null)
       {
          this.userList=this.loadUserListFromDb();
       }
       return this.userList;
  }
  private .loadUserListFromDb()
  {
      .........
  }
}
rockjava 2008-04-11
在造车轮子
fourfire 2008-04-11
谢谢大家,我试试
fourfire 2008-04-11
有个问题,我的查询条件没办法传递到bean里了,有什么办法知道bean绑定的哪个datatable吗?
ltian 2008-04-11
fourfire 写道
有个问题,我的查询条件没办法传递到bean里了,有什么办法知道bean绑定的哪个datatable吗?


如果你用JSF做查询,那么页面中用于查询的JSF输入控件的value绑定到backben的属性上,那么查询条件就传到backbean中了,怎么可能传递不到呢?datatable相当于view,backbean相当于视图,那么只要datatable知道自己绑定到backbean的哪个属性就可以了,backbean没有必要知道自己的属性被哪个JSF控件绑定了,因为backbean的一个属性可能同时被多个JSF控件绑定。
fourfire 2008-04-11
我想在页面中为backbean的属性赋值,在xml里的值在运行期发生改变了
ltian 2008-04-11
fourfire 写道
我想在页面中为backbean的属性赋值,在xml里的值在运行期发生改变了

这个有点不明白,不知道是不是说你在XML中为backbean配置了缺省值啊?

相关讨论