【发布时间】:2013-11-27 11:07:36
【问题描述】:
我正在使用带有 jsf2.2 的 Primefaces 4.0。
当我使用带有复选框的 dataTable 时,只要我选择记录,它就不会发回任何记录。
点击复选框后,它应该会发回记录。
我删除了多余的东西并使我的代码易于测试:
每秒有一个轮询打印选定的项目,以便我可以检查是否有东西发回。
在这样做之后,我发现没有任何东西被退回。 这是我的代码:
页面:
<h:head>
<title>System Monitor</title>
</h:head>
<h:body>
<h:form>
<p:poll interval="1" listener="#{indexBean.printSelect()}"/>
</h:form>
<h:form>
<p:dataTable id='data' var="proc" value="#{indexBean.procStatus}"
rowKey="#{proc.pid}" selection="#{indexBean.selectedProcs}">
<p:column>
<f:facet name='header'>
<h:outputText value='Process Name'/>
</f:facet>
<h:outputText styleClass="outputCell" id="pname" value='#{proc.name}'/>
</p:column>
<p:column selectionMode="multiple"/>
</p:dataTable>
</h:form>
</h:body>
支持 Bean:
@ManagedBean(name = "indexBean")
@ViewScoped
public class indexBean implements Serializable {
private ProcStatDataModel procStatus;
private SingleProcess[] selectedProcs;
@PostConstruct
public void loadProcStat() {
List<SingleProcess> temp = new ArrayList<>();
temp.add(new SingleProcess("test1"));
temp.add(new SingleProcess("test2"));
temp.add(new SingleProcess("test3"));
procStatus = new ProcStatDataModel(temp);
}
public void printSelect() {
if (selectedProcs != null) {
String str = "";
for (SingleProcess sp : selectedProcs) {
str += sp.getName() + "_";
}
System.out.print(str);
} else {
System.out.println("selectedProcs is null");
}
}
public ProcStatDataModel getProcStatus() {
return procStatus;
}
public SingleProcess[] getSelectedProcs() {
return selectedProcs;
}
public void setSelectedProcs(SingleProcess[] selectedProcs) {
this.selectedProcs = selectedProcs;
}
}
我之前尝试过像this 一样附加rowCheckListener,但没有成功。
另外,我尝试像this 一样添加f:view contentType="text/html",但没有帮助。
这很奇怪,因为我对 primefaces show case 的情况做了同样的事情,而且它的行为与我的想法一样。所以我觉得这个方法还可以,我的代码应该有问题。
感谢任何帮助。提前致谢。
【问题讨论】:
-
你调试了代码,你从哪里得到错误?它是否进入 setSelectedProcs()?而且,您没有在 bean 中设置任何 pid。也许 bean 无法通过 pid 找到您的行?我的 Eclipse 没有验证 ' 而不是 ",但我不知道它是否相关。
标签: checkbox primefaces datatable jsf-2.2