2017-10-17 6 views
0

私は、「その他」に設定されていると次のエディタに置き換わる、列、モデル - selectOneではなくinputTextを使用します。特定の自動車ブランドが選択されると、そのブランドのモデルのリストが表示されます。 「その他」を選択すると、入力テキストフィールドにモデルを入力できます。私は、レンダリングとイベントのさまざまな組み合わせを使用して、プライムフェイスでこれの仕組みを動作させるようには見えません。このような行のデータに基づいた編集コンポーネントのインライン切り替えが可能ですか?私は、私が試みていることを説明するために、車のためのprimefaces datatableデモを使用して簡単な例を構築しました(そしてフィールドモデルを追加しました)。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> 

ありがとう!

答えて

0

モデルのセルエディタにIDを入力し、ブランドを変更するときにそのIDを更新リストに追加することで、この問題を解決できました。

+0

あなたはそれをうまく解決しましたが、明示的なコード例は、同じ問題を抱えていると他のものに役立ちます。乾杯! – Kukeltje

関連する問題