Ich habe grundsätzlich zwei Eingabefeld ich zeige, wenn der Wert derzeit leer oder Null ist. Ist dies nicht der Fall, zeige ich einen outputText an. Diese beiden Werte sind Währungswerte, die in einem Long-Objekt gespeichert sind, und ich verwende einen Konverter, um die Daten richtig anzuzeigen (ich kann PrimeFaces 'inputNumber nicht verwenden, da ich PrimeFaces 5.3 verwende). Mein Problem ist folgendes:Wie aktualisiere ich ein Feld mit einem Konverter und Ajax in 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>
, wenn ich es so sagen, die durch den Wandler geworfen Nachrichten werden angezeigt, aber keines der Felder werden aktualisiert. wenn ich die gleiche Boolesche Variable für beide Eingabe/Ausgabe-Optionen (verändert die Variable verwendet in rendered
Attribut der 1rst Datenzeile edtVal2
in beide verwenden) verwenden, aber in etwa so:
<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>
Die ersten Feldaktualisierungen erfolgreich und die zweite funktioniert noch immer nicht.
Die Verwendung eines Konverters zum Anzeigen formatierter Daten ist ein Workaround, den ich bereits durchgeführt habe, und es funktioniert wie erwartet und ich benutze denselben Konverter wie zuvor. Aber dieses Mal verstehe ich nicht, warum es nicht funktioniert.
Der Konverter ist wichtig, um das Problem zu reproduzieren, aber jeder benutzerdefinierte Konverter scheint die Aufgabe zu erledigen.
Sie sollten Ihren Titel ernsthaft verbessern ... Lesen Sie [fragen], es enthält Vorschläge, wie man einen guten Titel schreibt. Und lesen Sie [mcve] und http://www.stackoverflow.com/tags/jsf/info – Kukeltje
Ich stimme zu, die Frage ist ziemlich lang, aber es ist minimal: Mein Problem hat eine verschwommene Ursache und ich habe versucht, es für 2 Stunden zu lösen . Ich denke nicht, dass diese Frage einen Vorwand verdient, vor allem mit dem Aufwand, den ich gemacht habe, um die Frage so genau wie möglich zu formulieren. – Sirmyself
Dennoch sollten Sie einen Text hinzufügen, um die Unterschiede zwischen dem ersten und zweiten Panelgrid zu erklären. Jetzt liegt es an den Leuten, die helfen wollen, die Unterschiede zu finden, und es ist kein [mcve] ;-) – Kukeltje