我使用PrimeFaces 3.1,我必须在datable中选择一行。 我在Primefaces展示中使用了这个例子来做到这一点,但它只在我的支持bean处于作用域会话中,而不是在视图中时才起作用,这意味着当用户回来时,我必须做一些额外的工作来移除它页面,我的代码有什么问题? 我控制器(在要求范围内):Primefaces数据表选择行和范围
@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。 – Makky
发布完整的代码,因为我们无法看到最新的错误。 – Makky
我试图只把我的代码的相关部分,但如果你认为缺少某些东西,告诉我,我会添加它。 – 893