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

时间:2017-10-17 22:17:08

标签: jsf primefaces jsf-2 datatable

我需要一个可编辑的数据表,它有一个列,比如说品牌,设置为“Other”时会替换下一列中的编辑器,模型 - 使用inputText而不是selectOne。如果选择了任何特定的汽车品牌,则会显示该品牌的型号列表。如果选择“其他”,则可以在输入文本字段中键入模型。我似乎无法使用渲染和事件的各种组合使得这些机制能够在primeface中工作。是否可以根据行中的数据进行编辑组件的内联切换?我用汽车的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>

谢谢!

1 个答案:

答案 0 :(得分:0)

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