Angenommen, wir haben eine Model-Driven-Liste für deptno Attribut mit dem Anzeigewert von Dname und selectOneChoice zu deptno Attribut gebunden in JSPX Seite
<af:selectOneChoice value="#{bindings.Deptno.inputValue}" label="Select Department"
required="true" shortDesc="#{bindings.Deptno.hints.tooltip}"
id="soc1" autoSubmit="true">
<f:selectItems value="#{bindings.Deptno.items}" id="si1"/>
</af:selectOneChoice>
Wenn wir den gewählten Wert wollen, die gemeinsame Fehler, den wir tun, ist die gleiche EL auf den Wert Eigenschaft SelectOneChoice Komponente gebunden zu verwenden, aber mit diesem erhalten wir den Index des ausgewählten Artikels statt als den Wert. Dies liegt daran, dass SelectItems mit Indizes als Werte generiert wird, wenn wir das Attribut als SelectOneChoice auf die Seite ziehen und dort ablegen.
auf die JSPX Seite
, In diesem Abschnitt ausgewählt Wert anzeigen wir sehen, wie gewählten Wert zu erhalten, ohne einzige Zeile Java-Code zu schreiben. Erstellen Sie eine outputText-Komponente mit der Werteigenschaft , die an # {bindings.Deptno.attributeValue} anstelle von # {bindings.Deptno.inputValue} gebunden ist, und aktualisieren Sie sie anhand der Listenauswahl, indem Sie die partialTriggers-Eigenschaft hinzufügen.
<af:outputText value = "Selected Value: #{bindings.Deptno.attributeValue}" id="ot1" partialTriggers="soc1"/>
Der obige Code gibt den Deptno-Wert des ausgewählten Elements an. Wenn die Depto von 'VERKÄUFE' 30 ist, wird 30 auf outputText unter angezeigt und wählt 'SALES' aus der Liste.
Wenn wir wollen, ‚Umsatz‘ selbst dann angezeigt werden, die folgenden EL sollte verwendet werden Dname vorausgesetzt, ist das zweite Attribut DeptView
<af:outputText value = "Display Value: #{bindings.Deptno.selectedValue ne ' ' ? bindings.Deptno.selectedValue.attributeValues[1] : ''}" id="ot2" partialTriggers="soc1"/>
Innenwertänderung Zuhörer
Auswertung oben EL Ausdrücke Innerhalb von ValueChangeListener gibt den aktuellen ausgewählten Wert statt gibt den zuvor ausgewählten Wert als der ausgewählte Wert wird nicht auf das Modell von deraktualisierttime ValueChangeListener wird aufgerufen. In diesem Fall müssen wir vor dem Zugriff auf den ausgewählten Wert zuerst das Modell aktualisieren. Hier
ist der Beispielcode:
public void valueChanged(ValueChangeEvent valueChangeEvent) {
this.setValueToEL("#{bindings.Deptno.inputValue}", valueChangeEvent.getNewValue()); //Updates the model
System.out.println("\n******** Selected Value: "+resolveExpression("#{bindings.Deptno.attributeValue}"));
System.out.println("\n******** Display Value: "+resolveExpression("#{bindings.Deptno.selectedValue ne ' ' ? bindings.Deptno.selectedValue.attributeValues[1] : ''}"));
}
public Object resolveExpression(String el) {
FacesContext facesContext = FacesContext.getCurrentInstance();
ELContext elContext = facesContext.getELContext();
ExpressionFactory expressionFactory = facesContext.getApplication().getExpressionFactory();
ValueExpression valueExp = expressionFactory.createValueExpression(elContext,el,Object.class);
return valueExp.getValue(elContext);
}
public void setValueToEL(String el, Object val) {
FacesContext facesContext = FacesContext.getCurrentInstance();
ELContext elContext = facesContext.getELContext();
ExpressionFactory expressionFactory = facesContext.getApplication().getExpressionFactory();
ValueExpression exp = expressionFactory.createValueExpression(elContext, el, Object.class);
exp.setValue(elContext, val);
}
@BalusC - dies ist nicht spezifisch ADF, wenn Sie seine Frage zu lesen - diese JDeveloper spezifisch ist. Es gibt einen Grund, warum JDeveloper mehr als 3.000 Seiten Handbuch hat. – GrrLex