primefaces 根据另一列中的选择更改数据表中一列的编辑器

primefaces change editor for one column in datatable based on the selection in another column

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

页面片段

            <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>

谢谢!

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