2017-10-17 5 views
0

Ich habe eine Anforderung für eine bearbeitbare Datentabelle, die eine einzige Spalte hat, sagen Marke, dass, wenn auf "Andere" den Editor im nächsten ersetzt column, model - mit einem inputText statt einem selectOne. Wenn eine bestimmte Automarke ausgewählt wird, wird die Liste der Modelle für diese Marke angezeigt. Wenn "Andere" ausgewählt wird, können sie ein Modell in ein Eingabetextfeld eingeben. Ich kann nicht die Mechanik davon in Primzahlen mit verschiedenen Kombinationen von gerenderten und Events arbeiten. Ist diese Art der Inline-Schaltung von Bearbeitungskomponenten basierend auf den Daten in der Zeile möglich? Ich habe ein einfaches Beispiel mit der Dataset-Demo von primefaces für Autos erstellt (und ein Feld Model hinzugefügt), um zu veranschaulichen, was ich versuche.Hauptoberflächen ändern Editor für eine Spalte in Datentabelle basierend auf der Auswahl in einer anderen Spalte

Seite Snippet

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

Dank!

Antwort

0

Ich konnte dieses Problem lösen, indem ich eine ID in den Zelleneditor für das Modell einfügte und diese beim Ändern der Marke zur Aktualisierungsliste hinzufügte.

+0

Großartig Sie haben es gelöst, aber explizite Codebeispiele helfen anderen mehr, wenn sie auf dasselbe Problem stoßen. Prost! – Kukeltje

Verwandte Themen