기본적으로 값이 현재 비어 있거나 null 인 경우 기본적으로 두 개의 입력 필드가 표시됩니다. 그렇지 않으면 outputText를 표시합니다. 이 두 값은 Long 객체에 저장된 통화 값이며 데이터를 제대로 표시하기 위해 변환기를 사용합니다 (PrimeFaces 5.3을 사용하고 있기 때문에 PrimeFaces의 inputNumber를 사용할 수 없습니다). 내 문제는 다음과 같습니다.JSF에서 변환기와 아약스를 사용하여 필드를 업데이트하는 방법
<c:set var="edtVal1" value="#{bean.val1 ne null and bean.val1 ne 0}" scope="request" />
<c:set var="edtVal2" value="#{bean.val2 ne null and bean.val2 ne 0}" scope="request" />
<p:panelGrid>
<p:row>
<p:column colspan="2">
<p:messages id="mainMessages" globalOnly="false" autoUpdate="true" showDetail="true" />
</p:column>
</p:row>
<!-- [...] -->
<p:row>
<p:column styleClass="col-quarter col-label2">
<h:outputText value="value 1" />
</p:column>
<p:column styleClass="col-quarter col-value2" rendered="#{edtVal1}">
<h:outputText id="val1Output" value="#{bean.val1}" converter="myConverter" />
</p:column>
<p:column styleClass="col-quarter" rendered="#{not edtVal1}">
<p:inputText id="val1Input" value="#{bean.val1}" converter="myConverter">
<p:ajax update="mainMessages val1Input" event="change" />
</p:inputText>
</p:column>
</p:row>
<p:row>
<p:column styleClass="col-quarter col-label2">
<h:outputText value="value 2" />
</p:column>
<p:column styleClass="col-quarter col-value2" rendered="#{edtVal2}">
<h:outputText id="val1Output" value="#{bean.val2}" converter="myConverter" />
</p:column>
<p:column styleClass="col-quarter" rendered="#{not edtVal2}">
<p:inputText id="val1Input" value="#{bean.val2}" converter="myConverter">
<p:ajax update="mainMessages val1Input" event="change" />
</p:inputText>
</p:column>
</p:row>
</p:panelGrid>
이렇게하면 변환기에서 발생하는 메시지가 표시되지만 필드가 업데이트되지 않습니다. I는 모두 입력/출력 옵션 같은 부울 변수를 사용하는 경우에는,과 같이 (모두 edtVal2
을 사용할 1rst 데이터 열의 rendered
속성에 사용되는 변수 변경) : 제 1 필드 갱신 성공적
<p:row>
<p:column styleClass="col-quarter col-label2">
<h:outputText value="value 1" />
</p:column>
<p:column styleClass="col-quarter col-value2" rendered="#{edtVal1}">
<h:outputText id="val1Output" value="#{bean.val1}" converter="myConverter" />
</p:column>
<p:column styleClass="col-quarter" rendered="#{not edtVal1}">
<p:inputText id="val1Input" value="#{bean.val1}" converter="myConverter">
<p:ajax update="mainMessages val1Input" event="change" />
</p:inputText>
</p:column>
</p:row>
및 두 번째는 여전히 작동하지 않습니다.
형식화 된 데이터를 표시하기 위해 변환기를 사용하면 이미 완료되었으며 예상대로 작동하고 이전과 같은 변환기를 사용합니다. 하지만 이번에는 왜 작동하지 않는지 이해할 수 없습니다.
변환기는 문제를 재현하는 데 중요하지만 모든 사용자 지정 변환기가 작업을 수행하는 것으로 보입니다.
당신의 타이틀을 진지하게 개선해야합니다 ... [질문]을 읽으십시오, 좋은 제목을 쓰는 방법에 대한 제안이 포함되어 있습니다. 그리고 [mcve] 및 http://www.stackoverflow.com/tags/jsf/info를 읽으십시오. – Kukeltje
질문에 상당히 동의하지만 최소한입니다 : 내 문제는 흐린 원인으로 2 시간 동안 풀려고했습니다. . 나는이 질문이 downvote를받을 가치가 있다고 생각하지 않는다. 특히 나는 가능한 한 정확하게 질문을 공식화하기 위해 노력했다. – Sirmyself
하지만 여전히 첫 번째와 두 번째 'panelgrid'의 차이점을 설명하는 텍스트를 추가해야합니다. 차이점을 찾기 위해 기꺼이 도와 줄 사람들에게 달려 있습니다. – Kukeltje