jsf执行两次的问题

dijie 2008-05-18 01:03:48
当登陆成功后,显示一个<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() 方法,改变了的数据源的值就是被他又覆盖了.

我想实现这个效果怎么办呢?
...全文
290 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyyawei 2010-05-13
  • 打赏
  • 举报
回复
备份任务会在设置的时间自动执行,也可在备份任务的右键菜单上手工启动。
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”即可开始执行恢复操作。和备份过程一样能看到恢复进度,完成后将弹出提示。
lyyawei 2010-05-13
  • 打赏
  • 举报
回复
步骤 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个文件系统备份任务就创建好了。
  • 打赏
  • 举报
回复
return 是肯定的
abc130314 2010-05-05
  • 打赏
  • 举报
回复
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; //我改变了数据源的值,没有用
……
licip 2010-05-05
  • 打赏
  • 举报
回复
关注这个问题,我现在也在被这个问题难住了。java2000_net 的方法并不可行呀。这样一来,所有都不能提交了。
wula0010 2009-02-17
  • 打赏
  • 举报
回复
我没用Hibernate ,只用了jsf,如果初始化的时候选择所有的数据,应该没有问题,但是如果初始化的数据比较多,上万条还这样就影响效率了。我不想在初始化的时候选择数据,这样就会有问题。
zhouxqq 2009-02-17
  • 打赏
  • 举报
回复
我也遇到了这种问题,好先没发解决。
zqpsswh 2008-05-21
  • 打赏
  • 举报
回复
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了
gj_wrxz 2008-05-20
  • 打赏
  • 举报
回复
哈哈,老大说的太经典了
老紫竹 2008-05-19
  • 打赏
  • 举报
回复
执行2次,一般是由于你的form的js 处理问题。
1 你调用了 form.submit()方法,造成了第一次提交
2 你的这个js 返回了true,造成 form 自身的第二次提交

此问题在firefox 下面非常明显,所以form的方法最好写成

<form onsubmit=".....; return false;"


保证自身不会提交,而只使用js提交

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧