【发布时间】:2013-05-31 21:47:45
【问题描述】:
我使用 PrimeFaces 3.1,我必须在数据表中选择一行。 我使用 Primefaces 展示中的示例来执行此操作,但它仅在我的支持 bean 处于范围会话中时才有效,而不是在视图中,这意味着当用户返回此页面时我必须做一些额外的工作才能将其删除,我的代码有什么问题? 我的控制器(在请求范围内):
@ManagedBean
@RequestScoped
public class Ctrlr implements Serializable{
@ManagedProperty(value = "#{myDataModel}")
private MyDataModel dataModel;
...
public void onSelectRow() {
//do something
}
}
backingBean(我必须使用会话范围才能正常工作):
@ManagedBean
@ViewScoped
public class MyDataModel extends ListDataModel<Bean> implements SelectableDataModel<Bean>, Serializable {
...
}
还有我的 xhtml 页面:
<p:dataTable var="bean"
id="tableResults"
selectionMode="single"
selection="#{ctrlr.selectedBean}"
value="#{myDataModel}"
rowKey="#{bean.id}">
<p:ajax event="rowSelect"
listener="#{ctrlr.onSelectRow()}"
update=":searchForm:details:detail"/>
...
我检查了调试,似乎每次重建控制器(每个请求)时,注入的属性都是一个新的,而不是从 viewScope 重新注入一个。
如果有人可以帮助我避免使用会话范围?
【问题讨论】:
-
不需要是scopeview。
-
发布完整的代码,因为我们看不出有什么问题。
-
我试着只放我的代码的相关部分,但如果你认为缺少某些东西,请告诉我,我会添加它。
-
你想对选中的行做什么?
-
我有一个带有搜索表单的屏幕,这个搜索的结果显示在搜索表单下,然后,用户可以选择一行并查看所选行的详细信息。
标签: java jsf primefaces datatable