【问题标题】:primefaces change editor for one column in datatable based on the selection in another columnprimefaces 根据另一列中的选择更改数据表中一列的编辑器
【发布时间】:2018-03-29 17:32:09
【问题描述】:

我需要一个具有单列的可编辑数据表,比如说品牌,当设置为“其他”时,将替换下一列中的编辑器,模型 - 使用 inputText 而不是 selectOne。如果选择了任何特定的汽车品牌,则会显示该品牌的车型列表。如果选择“其他”,则他们可以在输入文本字段中输入模型。我似乎无法使用渲染和事件的各种组合在primefaces中使用这种机制。这种基于行中数据的编辑组件的内联切换是否可行?我使用汽车的 primefaces 数据表演示(并添加了一个字段模型)构建了一个简单的示例来说明我正在尝试的内容。

页面sn-p

            <p:dataTable id="cars1" var="car" value="#{dtEditView.cars1}"
            editable="true" style="margin-bottom:20px">
            <f:facet name="header">
                  Row Editing
            </f:facet>

            <p:ajax event="rowEdit" listener="#{dtEditView.onRowEdit}"
                update="cars1" />
            <p:ajax event="rowEditCancel" listener="#{dtEditView.onRowCancel}"
                update="cars1" />

            <p:column headerText="Id">
                <p:cellEditor>
                    <f:facet name="output">
                        <h:outputText value="#{car.id}" />
                    </f:facet>
                    <f:facet name="input">
                        <p:inputText id="modelInput" value="#{car.id}" style="width:100%" />
                    </f:facet>
                </p:cellEditor>
            </p:column>

            <p:column headerText="Year">
                <p:cellEditor>
                    <f:facet name="output">
                        <h:outputText value="#{car.year}" />
                    </f:facet>
                    <f:facet name="input">
                        <p:inputText value="#{car.year}" style="width:100%" label="Year" />
                    </f:facet>
                </p:cellEditor>
            </p:column>

            <p:column headerText="Brand">
                <p:cellEditor>
                    <f:facet name="output">
                        <h:outputText value="#{car.brand}" />
                    </f:facet>
                    <f:facet name="input">
                        <h:selectOneMenu value="#{car.brand}" style="width:100%">
                            <f:selectItems value="#{dtEditView.brands}" var="man"
                                itemLabel="#{man}" itemValue="#{man}" />
                            <p:ajax event="change" immediate="true" update="model model_ti"></p:ajax>
                        </h:selectOneMenu>
                    </f:facet>
                </p:cellEditor>
            </p:column>

            <p:column headerText="Model">
                <p:cellEditor rendered="#{car.brand != 'Other'}">
                    <f:facet name="output">
                        <h:outputText value="#{car.model}" />
                    </f:facet>
                    <f:facet name="input">
                        <h:selectOneMenu value="#{car.model}" style="width:100%"
                            id="model">
                            <f:selectItems value="#{dtEditView.getModels(car.brand)}"
                                var="man" itemLabel="#{man}" itemValue="#{man}" />
                        </h:selectOneMenu>
                    </f:facet>
                </p:cellEditor>
                <p:cellEditor rendered="#{car.brand == 'Other'}">
                    <f:facet name="output">
                        <h:outputText value="#{car.model}" />
                    </f:facet>
                    <f:facet name="input">

                        <h:inputText value="#{car.model}" style="width:100%"
                            id="model_ti" />

                    </f:facet>
                </p:cellEditor>
            </p:column>

谢谢!

【问题讨论】:

    标签: jsf primefaces jsf-2 datatable


    【解决方案1】:

    我能够通过在模型的单元格编辑器上放置一个 ID 并在更改品牌时将其添加到更新列表中来解决这个问题。

    【讨论】:

    • 很好,你解决了它,但是如果他们遇到同样的问题,明确的代码示例可以帮助更多。干杯!
    猜你喜欢
    • 2019-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 2013-03-01
    • 2022-01-06
    • 1970-01-01
    相关资源
    最近更新 更多