此代码出现问题:
<h:form>
<rich:panel>
<f:facet name="header">
<h:selectManyCheckbox title="Select which types of requests you want to see"
onchange="submit();" value="#{filterListener.chosenFilters}"
id="selectBoxContainer" >
<f:selectItem id="approvedByITS" itemLabel="Approved by ITS" itemValue="approvedByITS" />
<f:selectItem id="approvedByPO" itemLabel="Approved by Process Owner" itemValue="approvedByPO" />
<f:selectItem id="dob" itemLabel="Date" itemValue="dob" />
<f:selectItem id="externalAssignedTo" itemLabel="External assigned" itemValue="externalAssignedTo" />
<f:selectItem id="internalAssignedTo" itemLabel="Internal assigned" itemValue="internalAssignedTo" />
<f:selectItem id="ITSapprovedBy" itemLabel="ITS approved by" itemValue="ITSapprovedBy" />
<f:selectItem id="severity" itemLabel="Severity" itemValue="severity" />
<f:selectItem id="status" itemLabel="status" itemValue="status" />
<f:valueChangeListener type="no.ngt.tech.rt2.listeners.requestFilterListener" />
</h:selectManyCheckbox>
</f:facet>
<h:dataTable value="#{filterListener.chosenFilters}" var="selects" >
<h:column>
<h:outputText value="#{selects}" />
</h:column>
</h:dataTable>
<br />
<h:messages />
</rich:panel>
</h:form>
我们可以看到我有值=“#{filterListener.chosenFilters}”。 dataTable的值也是相同的,所以每当我点击其中一个selectItem时,dataTable都会添加或删除一个元素(这是有效的)。在我的支持bean中,我有以下代码:
public class requestFilterListener implements ValueChangeListener {
private List<String> chosenFilters;
public requestFilterListener() {
}
public void processValueChange(ValueChangeEvent event) {
System.out.println("processValueChange called");
if (chosenFilters != null) {
System.out.println(chosenFilters.size());
}
}
public List<String> getChosenFilters() {
return chosenFilters;
}
public void setChosenFilters(List<String> chosenFilters) {
this.chosenFilters = chosenFilters;
}
每次我点击其中一个复选框,用适当的数据添加/删除一列,在我的控制台中,我在processValueChange方法中输出消息“processValueChange”,但在此期间,selectedFilters始终为null,并且if表达式永远不会运行。怎么会?这是一个会话bean,我真的不明白为什么我的列表不能在支持bean中使用,但是我的dataTable使用它没有问题。
感谢您抽出时间研究这个问题。
答案 0 :(得分:0)
问题可能出在这个标签上:
<f:valueChangeListener type="no.ngt.tech.rt2.listeners.requestFilterListener" />
您正在指示f:valueChangeListener标记创建 requestFilterListener 的新实例,而不是绑定到托管bean配置指定的实例。使用绑定属性绑定到#{filterListener} 。