2017-10-17 11 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를 입력하고 브랜드를 변경할 때 업데이트 목록에 추가하여이 문제를 해결할 수있었습니다.

+0

위대한 해결 방법을 제시했지만 명시적인 코드 예제는 동일한 문제가 발생하면 다른 코드보다 도움이됩니다. 건배! – Kukeltje