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

问题描述:

我有一个可编辑数据表的要求,该列有一列,可以说品牌,当设置为“其他”时将替换下一个编辑器列,模型 - 使用inputText而不是selectOne。如果选择任何特定的汽车品牌,则显示该品牌的型号列表。如果选择“其他”,则他们可以在输入文本字段中键入模型。我似乎无法使用渲染和事件的各种组合在primefaces中工作。是否可以根据行中的数据进行编辑组件的这种内联切换?我已经使用汽车的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并在更改品牌时将其添加到更新列表来解决此问题。

+0

伟大的你解决了它,但明确的代码示例帮助其他更多,如果他们碰到相同的问题。干杯! – Kukeltje