JSF 2 Composite-Komponente nicht aktualisiert-Wert mit f:ajax
Ich versuche zu implementieren Zusammengesetzte Komponente in JSF 2, die zur Unterstützung des "change" ajax event.
Der CC ist:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.prime.com.tr/ui"
xmlns:composite="http://java.sun.com/jsf/composite">
<!-- INTERFACE -->
<composite:interface name="inputText">
<composite:attribute name="label" />
<composite:attribute name="value" />
<composite:attribute name="disabled" default="false" />
<composite:attribute name="required" default="false" />
<composite:attribute name="rendered" default="true" />
<composite:clientBehavior name="change" event="change"
targets="#{cc.clientId}:input" />
</composite:interface>
<!-- IMPLEMENTATION -->
<composite:implementation>
<h:panelGroup id="#{cc.clientId}" rendered="#{cc.attrs.rendered}">
<h:outputLabel value="#{cc.attrs.label}" for="input" />
<h:inputText id="input" label="#{cc.attrs.label}"
value="#{cc.attrs.value}" disabled="#{cc.attrs.disabled}"
required="#{cc.attrs.required}" />
<h:message for="input" />
</h:panelGroup>
</composite:implementation>
</html>
Nun, ich bin versucht, es zu benutzen in der folgenden form:
<h:form id="form">
<input:inputText value="#{bean.value}" label="d1" id="d1">
<f:ajax event="change" update="@this,d2,d3" />
</input:inputText>
<h:inputText value="#{bean.value}" id="d2">
<f:ajax event="change" update="@this,d1,d3" />
</h:inputText>
<h:outputText id="d3" value="#{bean.value}" />
</h:form>
Soweit ich das verstanden habe, wenn ich d1, d2 und d3 angezeigt werden soll der Wert von d1, und wenn ich d2, beide d1 und d3 sollten sich entsprechend ändern, wie gut.
Das problem ist, dass wenn ich den Wert ändern in d2, es spiegelt nur in d3, während die d1 bleibt leer, und wenn ich d2, d1 und d2 bleibt leer.
Ich bin mit Mojarra 2.0.2 (ich konnte es nicht Schaffe 2.0.3 auf Google App Engine, die ist meine). Vermisse ich etwas in der Art composite-Bauteilen gebaut werden sollte? Oder ist es ein bug in Mojarra 2.0.2?
InformationsquelleAutor Yonatan | 2011-04-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
:
ist falsch.
#{cc.clientId}
ist die id der Komponente, die die Muttergesellschaft der panelGroup. Sie haben die gleiche ID ist falsch. Geben Sie eine id wie "myComponentPanel
", und es wird der absolute id (wenn Sie sich in den component-tree)"#{cc.clientId}:myComponentPanel
".Ich vermute, wenn du dies korrigieren, Ihre ajax-Verhalten wird funktionieren.
IBM tatsächlich verwendet ein div (nicht JSF panelGroup) mit seiner id auf
#{cc.clientId}
Hier eine andere IBM JSF-fu-Artikel gibt etwas mehr hintergrund auf, warum sollten Sie eine
div
im composite-Bauteile.InformationsquelleAutor Brian Leathem