2012-03-29 3 views
0

ich bin neu in JDeveloper und ADF und ich bin vor ein bisschen ein Problem in den ausgewählten Wert von selectOneChoice Komponente bekommen. Dies ist der valuChangeListener:den ausgewählten Wert von selectOneChoice in ADF Erhalten Sie und nicht der Index

public void versionValueChangeListener(ValueChangeEvent valueChangeEvent) { 
    System.out.println(valueChangeEvent.getOldValue().toString()); 
    System.out.println(valueChangeEvent.getNewValue().toString()); 

} 

Dies ist der Index der ausgewählten Wahl geben und nicht der Text selbst. Wie kann ich den Text und nicht den Index bekommen? Diese ist der Code für das selectOneChoice:

<af:selectOneChoice value="#{bindings.Version.inputValue}" 
             label="#{bindings.Version.label}" 
             required="#{bindings.Version.hints.mandatory}" 
             shortDesc="#{bindings.Version.hints.tooltip}" 
             id="soc3" autoSubmit="true" 
             valueChangeListener="#{savesBean.versionValueChangeListener}"> 
        <f:selectItems value="#{bindings.Version.items}" id="si3"/> 
        </af:selectOneChoice> 

Thanx :)

Antwort

1

Dies ist, wie die Jungs von Orcle tun es

How-to get the selected af:selectOneChoice Label obwohl meiner Meinung nach kann es auf andere Weise durchgeführt werden ..

.

ich glaube, Sie besser ein map zu bauen, in dem der Index das Label der Schlüssel und der Wert wird

als in versionValueChangeListener werden Sie die Karte etwas wie folgt zugreifen:

myMap.get(valueChangeEvent.getNewValue().toString());

0

Diese nicht ADF spezifisch ist. Dies ist HTML-spezifisch. bezieht es nur der Wert von HTML <input type="radio"> Element wurde, nicht den Wert des HTML <label> Element gesendet. Dies gilt für jede andere HTML <input>, <select> und <textarea> Element.

Die Lösung zu Ihrem "Problem" ist einfach: Sie haben bereits alle Etiketten in Ihrer Backing Bean in der Sammlung hinter #{bindings.Version.items}. Holen Sie sich das Etikett von dort basierend auf dem ausgewählten Wert.

Alternativ setzte das gesamte komplexe Objekt statt nur ihren Wert als Positionswert (beide den Wert und das Etikett enthält). Sie benötigen nur eine Converter, um zwischen dem komplexen Objekt und der Zeichenfolge zu konvertieren.

0

Es ist eine Eigenschaft für die Auswahl einer Wahl Punkt auf der jsp/JSF-Seite, die Sie den aktuellen Objektwert passieren läßt oder den Indexwert aus der Liste zu übergeben. Klicken Sie auf das Auswahl eine Wahl Element in der jsp/JSF-Seite, dann drücken Sie auf die Registerkarte Bindungen an der Unterseite, gehen Sie auf die Seite Definition (Sie werden es an der Spitze der Bindungen Seite) und die Auswahl ein Auswahlelement wird hervorgehoben in der Seitendefinitionsdatei, die jetzt geöffnet ist. Wenn Sie den Eigenschafteninspektor von hier aus betrachten - es gibt eine Eigenschaft namens "SelectItemValueMode", die standardmäßig auf den ListIndex-Wert gesetzt ist, können Sie ihn von hier aus in das ListObject ändern. Dies ist die letzte Eigenschaft, die im Eigenschaftenfenster aus der Seitendefinitionsdatei für das Auswahllistenobjekt aufgelistet wird.

+0

@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

-1

Sie können die Lösung für dieses Problem auf der folgenden URL finden Sie heraus: https://blogs.oracle.com/adf/entry/getting_selected_value_from_selectonechoice

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); 
} 
+0

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/11362471) –

+0

@AdamMichalik getan. Vielen Dank für Ihren Kommentar. – XpiritO

Verwandte Themen