【问题标题】:Dropdown's valueChangeListener not working with primefaces datatableDropdown 的 valueChangeListener 不适用于 primefaces 数据表
【发布时间】:2011-11-11 09:44:04
【问题描述】:

我在 xhtml 中有数据表和下拉菜单。如果我在此页面中删除 p:datatable 代码,那么我可以调用 dropdown 的 valueChangeListener ,但是如果 xhtml 中存在 p:datatable ,那么我无法调用它。

Xhtml代码是

<ui:define name="content">
    <f:view>
        <h:form id="accountSummaryForm" prependId="false">
            <h:selectBooleanCheckbox id="checkbox" value="true" />
            <h:outputLabel value="Show certificates preview on sumit"></h:outputLabel>
            <h:outputLabel value="Show certificates preview on sumit"></h:outputLabel>
            <h:outputText align="left"
                value="Value is #{reqSummaryHandler.certNumber}" />
            <p:dataTable id="reqActList" paginatorAlwaysVisible="true"
                var="reqInfo" value="#{reqSummaryHandler.certActListModel}"
                paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                paginator="true" rows="#{label.accountList_defaultNumberOfRows}"
                selectionMode="single"
                rowsPerPageTemplate="#{label.accountList_numberOfRows}" width="60%">
                <p:column style="text-align:center;" filterBy="" sortBy=""
                    width="5%">
                    <f:facet name="header">
                        <h:outputLabel value="#{label.certNumber}" />
                    </f:facet>
                    <h:outputText align="left" value="#{reqInfo.certNumber}" />
                </p:column>
                <p:column style="text-align:center;" filterBy="" sortBy=""
                    width="5%">
                    <f:facet name="header">
                        <h:outputLabel value="Version" />
                    </f:facet>
                    <h:outputText align="left" value="#{reqInfo.certVersionNbrString}" />
                </p:column>
                <p:column style="text-align:center;" filterBy="" sortBy=""
                    width="5%">
                    <f:facet name="header">
                        <h:outputLabel value="Insured" />
                    </f:facet>
                    <ui:repeat value="#{reqInfo.clientList}" var="insuredInfo">
                        <h:outputText align="left"
                            value="#{insuredInfo.generalPartyInfo.nameInfo.commName.commercialName}" />
                    </ui:repeat>
                </p:column>
                <p:column style="text-align:center;" filterBy="" sortBy=""
                    width="5%">
                    <f:facet name="header">
                        <h:outputLabel value="Certificate Holder" />
                    </f:facet>
                    <ui:repeat value="#{reqInfo.certificateHolderInfoList}"
                        var="certHoldInfo">
                        <h:outputText align="left"
                            value="#{certHoldInfo.additionalInterest.generalPartyInfo.nameInfo.commName.commercialName}" />
                    </ui:repeat>
                </p:column>
                <p:column style="text-align:center;" filterBy="" sortBy=""
                    width="5%">
                    <f:facet name="header">
                        <h:outputLabel value="Activity Performed" />
                    </f:facet>
                    <h:outputText align="left" value="#{reqInfo.effectiveTypeCd}" />
                </p:column>
                <p:column style="text-align:center;" filterBy="" sortBy=""
                    width="5%">
                    <f:facet name="header">
                        <h:outputLabel value="Certificate Status" />
                    </f:facet>
                    <h:outputText align="left" value="#{reqInfo.statusCd}" />
                </p:column>
                <p:column style="text-align:center;" filterBy="" sortBy=""
                    width="5%">
                    <f:facet name="header">
                        <h:outputLabel value="Third Party" />
                    </f:facet>
                    <h:outputText align="left"
                        value="#{reqInfo.certWordingEndorsementInd}" />
                </p:column>
                <p:column style="text-align:center;" filterBy="" sortBy=""
                    width="5%">
                    <f:facet name="header">
                        <h:outputLabel value="Manual Form" />
                    </f:facet>
                    <h:outputText align="left" value="#{reqInfo.manualEntryInd}" />
                </p:column>
                <p:column style="text-align:center;" filterBy="" sortBy=""
                    width="5%">
                    <f:facet name="header">
                        <h:outputLabel value="Manual Addendum" />
                    </f:facet>
                    <h:outputText align="left" value="#{reqInfo.mnlAddendumInd}" />
                </p:column>
                <p:column style="text-align:center;" filterBy="" sortBy=""
                    width="5%">
                    <f:facet name="header">
                        <h:outputLabel value="Path" />
                    </f:facet>

                    <p:cellEditor>
                        <f:facet name="output">
                            <h:outputText align="left" value="#{reqInfo.routePathCd}"
                                readonly="true" />
                        </f:facet>
                        <f:facet name="input">
                            <h:selectOneMenu value="#{reqInfo.routePathCd}">
                                <f:selectItem itemLabel="Issue  Distribute" itemValue="A" />
                                <f:selectItem itemLabel="Send to Underwriter" itemValue="B" />
                                <f:selectItem itemLabel="Issue  Do Not Distribute"
                                    itemValue="C" />
                            </h:selectOneMenu>
                        </f:facet>
                    </p:cellEditor>
                    <p:rowEditor rendered="#{reqInfo.statusCd eq 'A'}" />
                </p:column>
                <p:column style="text-align:center;white-space: normal;nowrap">
                    <f:facet name="header">
                        <h:outputLabel value="Action" />
                    </f:facet>
                    <ui:repeat value="#{reqInfo.availableFunctions.functionNameArray}"
                        var="linkInfo">
                        <p:commandLink id="View" value="#{linkInfo}" ajax="false" />
                        <br />
                    </ui:repeat>
                </p:column>
            </p:dataTable>
            <p:spacer width="50" height="0"></p:spacer>
            <p:spacer width="50" height="0"></p:spacer>
            <p:spacer width="3" height="0"></p:spacer>
            <p:spacer width="3" height="0"></p:spacer>
            <p:spacer width="3" height="0"></p:spacer>
            <p:spacer width="3" height="0"></p:spacer>
            <p:spacer width="3" height="0"></p:spacer>
            <p:spacer width="3" height="0"></p:spacer>
            <h:outputLabel value="Assign Path" style="font-weight:bold" />
            <p:spacer width="5" height="10" />
            <h:selectOneMenu id="dropdown2"
                valueChangeListener="#{reqSummaryHandler.DoPathProcessing1}"
                value="#{reqSummaryHandler.certNumber}" onchange="submit();">
                <f:selectItem itemLabel="Issue  Distribute" itemValue="A" />
                <f:selectItem itemLabel="Send to Underwriter" itemValue="B" />
                <f:selectItem itemLabel="Issue  Do Not Distribute" itemValue="C" />
            </h:selectOneMenu>
        </h:form>
    </f:view>
</ui:define>

监听代码是

    public void DoPathProcessing1(ValueChangeEvent event) {
    String newValue = (String) event.getNewValue();
    System.out.println("Path"
            + certActListModel.getRowData().getRoutePathCd());
    certActListModel.getRowData().setRoutePathCd(newValue);

    System.out.println("value is " + newValue);
}

知道为什么它不起作用吗?

我正在使用 jsf-api-2.0.3 和 primefaces-2.2.1

【问题讨论】:

    标签: jsf-2 primefaces


    【解决方案1】:

    您正在使用下拉组件的valuevalueChangeListener 属性。你为什么要这样做?

    只有value="#{reqSummaryHandler.certNumber} 将在您的托管bean 中调用setCertNumber(String certNumber)。为什么不直接把这段代码放到 setter 方法中呢?

    【讨论】:

    • thanks maple_shaft... 但是我需要在下拉值更改时刷新 p:datatable,以便我可以更新列值。如果我不使用,我将如何刷新数据表值更改监听器。
    • 只需将此行添加到setCertNumber ... certActListModel.getRowData().setRoutePathCd(newValue);
    • 我尝试添加提到的同一行,但是一旦屏幕第一次加载,并且我更改下拉列表中的值,即使我选择了“B”,更改的值也会在列中显示为“A” ”。这是第一次工作,但如果我再次更改下拉值,它不会在表中更改。调试时我得到这个异常 - javax.faces.model.NoRowAvailableException
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 2012-04-14
    • 2011-07-30
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    相关资源
    最近更新 更多