0

此代码出现问题:

<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 called”,但在此期间, selectedFilters 始终为空,并且 if表达式永远不会运行。怎么会?这是一个会话 bean,我真的不明白为什么我的列表不能在支持 bean 中使用,但我的 dataTable 可以毫无问题地使用它。

感谢您花时间调查此事。

4

1 回答 1

0

问题可能出在这个标签上:

<f:valueChangeListener type="no.ngt.tech.rt2.listeners.requestFilterListener" />

您正在指示f:valueChangeListener标记创建requestFilterListener的新实例,而不是绑定到托管 bean 配置指定的实例。使用binding属性绑定到#{filterListener}

于 2009-03-24T12:10:25.460 回答