当登陆成功后,显示一个<h:dataTable id="table" value="#{userBean.users}" var="u" border="1">加载的时候执行
private DataModel users = new ListDataModel(); public DataModel getUsers() throws UserException {
users.setWrappedData(this.getUserService().browse());//显示所有数据
return users;
}

public void setUsers(DataModel users) {
this.users = users;
}我也知道由于JSF生命周期的原因getUsers()会被执行两次.问题来了,我想当登陆成功后,显示所有数据.然后我设置一个按纽,输入查询条件,
<h:commandButton value="#{msgs.select}"
action="#{userBean.selectAction}" />//查询按纽
<h:inputText id="money" value="#{userBean.user.money}"> //查询条件
</h:inputText>public String selectAction() throws UserException {
List list = this.getUserService().select(this.user.getMoney());
System.out.print(this.user.getMoney());
System.out.print(list.size());
if (list.size() > 0)
users.setWrappedData(list); //我改变了数据源的值,没有用
return null;
}查了Hibernate sql语句:
00:50:56,046 INFO  [STDOUT] Hibernate: select user0_.ID as ID0_, user0_.NAME as NAME0_, user0_.PASSWORD as PASSWORD0_, user0_.MONEY as MONEY0_ from USER user0_
00:50:56,093 INFO  [STDOUT] Hibernate: select user0_.ID as ID0_, user0_.NAME as NAME0_, user0_.PASSWORD as PASSWORD0_, user0_.MONEY as MONEY0_ from USER user0_ where user0_.MONEY=?  //selectAction已经起作用了,但是被下面的覆盖了.
00:50:56,109 INFO  [STDOUT] 1000
00:50:56,109 INFO  [STDOUT] 12
00:50:56,140 INFO  [STDOUT] Hibernate: select user0_.ID as ID0_, user0_.NAME as NAME0_, user0_.PASSWORD as PASSWORD0_, user0_.MONEY as MONEY0_ from USER user0_  //生命周期最后执行了getUsers() 方法,改变了的数据源的值就是被他又覆盖了.我想实现这个效果怎么办呢?

解决方案 »

  1.   

    执行2次,一般是由于你的form的js 处理问题。
    1 你调用了 form.submit()方法,造成了第一次提交
    2 你的这个js 返回了true,造成 form 自身的第二次提交此问题在firefox 下面非常明显,所以form的方法最好写成<form onsubmit=".....; return false;" 
    保证自身不会提交,而只使用js提交
      

  2.   

    private DataModel users = new ListDataModel(); public DataModel getUsers() throws UserException { 
    users.setWrappedData(this.getUserService().browse());//显示所有数据 
    return users; 

    改成:
    private DataModel users = null;
    public DataModel getUsers() throws UserException { 
      if (users==null)
          users.setWrappedData(this.getUserService().browse());//显示所有数据 
      return users; 
    } 就OK了
      

  3.   

    我没用Hibernate ,只用了jsf,如果初始化的时候选择所有的数据,应该没有问题,但是如果初始化的数据比较多,上万条还这样就影响效率了。我不想在初始化的时候选择数据,这样就会有问题。
      

  4.   

    关注这个问题,我现在也在被这个问题难住了。java2000_net 的方法并不可行呀。这样一来,所有都不能提交了。
      

  5.   

    getUsers()调了2次。
    一次在应用请求值之前。
    一次在渲染的时候。
    selectAction()在中间执行。你可以试下这样改:
    Object data;
    public DataModel getUsers() throws UserException {
    if(data==null){
    data=this.getUserService().browse();
    }
    users.setWrappedData(data);//显示所有数据
    return users;
    }public String selectAction() throws UserException {
    List list = this.getUserService().select(this.user.getMoney());
    System.out.print(this.user.getMoney());
    System.out.print(list.size());
    if (list.size() > 0)
    data=list; //我改变了数据源的值,没有用
    ……
      

  6.   

    步骤 3 这里列出client的只有安装了Disk Agent的client,从中选择要备份的目录和文件,点击”Next”
     
    步骤 4 选择若干备份数据存储介质,点击Next,
    步骤 5 调整模板中默认的失效保护天数,点击Next,
     
    步骤 6 配置任务调度策略
     
    图中红色表示当日做全备,蓝色表示当日做增量备份(可能有若干次),黄色表示当日即有全备又有增量备份,白色表示当日不做备份(节假日)。未定制Schedule前,以上界面显示的是Template中的默认设置。要定制shedule,可在某一日期上用鼠标右键点击,选择”Schedule”,出现定制界面:
     
    Recurring表示重复周期模式,Time options/use starting分别表示备份开始执行的具体时间和日期;
    Recurring options表示周期具体设置,如Recurring选择了Weekly,则Recurring options可选择每周几进行备份;
    Backup type表示备份模式,如全备和增量备份;
    Network load表示网络负载,建议当使用专用的备份网络时选择High以达到最快的备份速度,当与业务网络共用时选择Medium或者Low以减少对业务的带宽冲击;
    Backup protection表示失效保护时间设置,当备份超过设定的保护时间后可能被新的备份数据覆盖。
    我们建议采用全备+增量备份的方式,如每周日晚上23:00全备,周一至周五晚上22:00作增量备份,每个备份保留3周。
    步骤 7 定制完成后选择Next,到了此任务的Summary界面,可查看此任务的Summary情况,直接点击Next跳过
    步骤 8 保存备份任务
    选择Save as,给此任务取一个名字,设置一个任务分组名,点击OK,1个文件系统备份任务就创建好了。
      

  7.   

    备份任务会在设置的时间自动执行,也可在备份任务的右键菜单上手工启动。
    2.4 启动备份任务
    2.4.1 自动启动
    备份任务会在Shedule里定义的时间自动执行,不需要人工干预。
    2.4.2 手工启动
    步骤 1 在CM Console的下拉列表菜单中选择Backup,在左边的对象面板中,展开Backup Specifications->Oracle Server,在想要启动的任务上点击右键,选择Start Backup
     
    步骤 2 设备备份类型和网络负载,点击OK
     
    步骤 3 HP-DP开始执行恢复,会显示恢复进度,完成后弹出对话框显示恢复结果。
    2.5 恢复一个备份
    步骤 1 在CM主界面左边的下拉列表中选择Restore,出现Restore树形控制界面,选择Filesystem节点下要恢复的对象,在右边窗口选择更具体的目录和文件:
     
    默认情况下,点击”Restore”会使用最近一次备份数据恢复到原客户端的原路径下。如果想恢复到某一个特定的备份数据,可以如果右边窗口根目录上点击鼠标右键,选择”Restore Version”,
     
    在弹出窗口选择要恢复的备份数据后点击OK:
     
    如果想恢复到不同的客户端或者不同的路径下,可切换到”Destination”选项卡,选择恢复目标client和恢复路径。 
    步骤 2 点击”Restore”即可开始执行恢复操作。和备份过程一样能看到恢复进度,完成后将弹出提示。