단일 열이있는 편집 가능한 데이터 테이블에 대한 요구 사항이 있는데, 브랜드를 말하면 "기타"로 설정하면 다음에 편집기를 대체하게됩니다 열, 모델 - 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>
감사합니다!
위대한 해결 방법을 제시했지만 명시적인 코드 예제는 동일한 문제가 발생하면 다른 코드보다 도움이됩니다. 건배! – Kukeltje