【发布时间】:2014-07-11 17:43:06
【问题描述】:
我在xhtml 页面中有一个<p:dataTable>。该表不会显示支持 bean 的值。我已经调试到我知道 bean 的 getter 被调用了,而且我也知道这个 bean 中有项目。为什么会这样? Netbeans 7.3、JSF2.2、Tomcat 7、jdk1.7、primefaces 4.0。
这是我的表格,这是在一个名为“mainForm”的表单中
<p:dataTable id="DTsamples" widgetVar="DTsamplesVw" var="sample" value="#{alterSampleController.samples}"
filteredValue="#{alterSampleController.filteredSamples}" paginator="true" rows="20"
sortMode="multiple" scrollable="true" rowStyleClass="#{sample.rowColorByType}">
<p:column headerText="Lab Number" footerText="Lab Number" sortBy="labNumber" filterMatchMode="contains" filterBy="labNumber" filterMaxLength="20">
#{sample.labNumber}
</p:column>
<p:column headerText="Container ID" footerText="Container ID" sortBy="containerID" filterMatchMode="contains" filterBy="containerID" filterMaxLength="11">
#{sample.containerID}
</p:column>
<p:column headerText="Sample Type" footerText="Sample Type" sortBy="sampleType" filterMatchMode="contains" filterBy="sampleType" filterMaxLength="50">
#{sample.sampleType}
</p:column>
<p:column headerText="Field ID" footerText="Field ID" sortBy="fieldID" filterMatchMode="contains" filterBy="fieldID" filterMaxLength="150">
#{sample.fieldID}
</p:column>
<p:column headerText="Sample ID" footerText="Sample ID" sortBy="sampleID" filterMatchMode="contains" filterBy="sampleID" filterMaxLength="150">
#{sample.sampleID}
</p:column>
<p:column headerText="Grower" footerText="Grower" sortBy="grower" filterMatchMode="contains" filterBy="grower" filterMaxLength="50">
#{sample.grower}
</p:column>
~~~A few other columns that don't contain data~~~~
</p:dataTable>
这是一个获取搜索结果的对话框
<h:form id="innerSearch"><p:dialog id="searchDialogID" widgetVar="searchDialog" header="Sample search" resizable="false" draggable="false" showEffect="puff"
hideEffect="puff" appendToBody="false" modal="true" rendered="#{alterSampleController.allowReading eq true}">
~~~Bunch of inputTexts and selectoneMenus to get search details
<p:commandButton update=":mainForm" process="innerSearch" icon="ui-icon-search" value="Search" actionListener="#{alterSampleController.loadSearch}" oncomplete="searchDialog.hide()"/>
</p:dialog>
</h:form>
相关的Backing Bean
@ManagedBean
@ViewScoped
public class AlterSampleController implements Serializable {
private ArrayList<SampleAlter> _samples;
private ArrayList<SampleAlter> _filteredSamples;
public void loadSearch() {
UIComponent table = FacesContext.getCurrentInstance().getViewRoot().findComponent(":mainForm:DTsamples");
table.setValueExpression("sortBy", null);
if (_samples != null) {
_samples.clear();
}
_samples = _saHelper.searchList(getSearch());
}
getAgronomers().clear();
getGrowers().clear();
}
public ArrayList<SampleAlter> getSamples() {
return _samples;
}
public ArrayList<SampleAlter> getFilteredSamples() {
return _filteredSamples;
}
public void setFilteredSamples(ArrayList<SampleAlter> filteredSamples) {
this._filteredSamples = filteredSamples;
}
}
【问题讨论】:
-
属性alterSampleController.filteredSamples是否存在?
-
@JaqenH'ghar 是的,我编辑了代码并现在显示它。
-
只是一些建议:确保你没有嵌套表单(id 表明你是......)。尝试将表单放入对话框中,我相信这通常是推荐的。尝试使用 appendToBody="true"
-
@JaqenH'ghar 没有嵌套表单,尝试 appendToBody="true" 并切换对话框和表单仍然没有。
-
正常情况是使用 process="@form" 而不是 process="innerSearch",但它可能没有什么区别。抱歉,想法用完了
标签: jsf primefaces datatable