Получить выбранное значение из selectOneChoice в ADF, а не из индекса - PullRequest
1 голос
/ 29 марта 2012

Я новичок в JDeveloper и ADF, и я столкнулся с небольшой проблемой при получении выбранного значения из компонента selectOneChoice.Это valuChangeListener:

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

}

Это дает индекс выбранного варианта, а не сам текст.Как я могу получить текст, а не указатель?Это код для 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>

Спасибо:)

Ответы [ 5 ]

1 голос
/ 29 марта 2012

Вот как ребята из Orcle делают это

Как получить выбранную метку af: selectOneChoice хотя, на мой взгляд, это можно сделать другим способом ...

Я думаю, вам лучше построить map, в котором индекс будет ключом, а значение - меткой

чем в versionValueChangeListener вы получите доступ к карте примерно так:

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

0 голосов
/ 22 мая 2019

Это сработало для меня

BindingContainer binding = BindingContext.getCurrent().getCurrentBindingsEntry();
JUCtrlListBinding fc =(JUCtrlListBinding) binding.get(nameOfTheDataControl);
String selectedValue = (fc.getListIterBinding().getRowAtRangeIndex(newIndexSelected).getAttribute(nameOftheColu 
mnInTheDataControl)).toString();
0 голосов
/ 22 февраля 2016

Вы можете найти решение для этого по следующему URL: https://blogs.oracle.com/adf/entry/getting_selected_value_from_selectonechoice

Предположим, у нас есть список управляемых моделями для атрибута Deptno со значением отображения Dname и selectOneChoice, привязанным к Deptnoатрибут на странице jspx

<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>

Когда мы хотим, чтобы выбранное значение было обычной ошибкой, мы используем тот же EL, связанный со свойством value компонента SelectOneChoice, но используя это, мы получаем индекс выбранногопункт, а не значение.Это связано с тем, что при перетаскивании атрибута в виде SelectOneChoice на страницу, SelectItems генерируется с индексами в качестве значений.

Отображение выбранного значения на странице jspx

В этом разделе мы увидим, как получить выбранное значение без написания одной строки кода Java.Создайте компонент outputText со свойством value, связанным с # {bindings.Deptno.attributeValue} вместо # {bindings.Deptno.inputValue}, и сделайте его обновляемым на основе выбора списка, добавив свойствоpartalTriggers.

<af:outputText value = "Selected Value: #{bindings.Deptno.attributeValue}" id="ot1" partialTriggers="soc1"/>

Приведенный выше код дает значение Deptno для выбранного элемента.Если Deptno для 'SALES' равен 30, 30 будет отображаться на outputText при выборе 'SALES' из списка.

Если мы хотим, чтобы отображался сам SALES, тогда следует использовать следующий EL, предполагая Dnameявляется вторым атрибутом DeptView

<af:outputText value = "Display Value: #{bindings.Deptno.selectedValue ne ' ' ? bindings.Deptno.selectedValue.attributeValues[1] : ''}" id="ot2" partialTriggers="soc1"/>

Внутренний слушатель изменения значения

Оценка приведенных выше выражений EL внутри ValueChangeListener не дает текущего выбранного значения, а дает ранее выбранное значениепоскольку выбранное значение не обновляется в модели к тому времени, когда вызывается ValueChangeListener.

В этом случае, прежде чем получить доступ к выбранному значению, нам нужно сначала обновить модель.

Вот пример кода:

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 голосов
/ 19 августа 2013

На странице jsp / jsf есть свойство для выбора элемента выбора, которое позволяет передавать фактическое значение объекта или индексное значение из списка. Нажмите на элемент «Выбрать один элемент выбора» на странице jsp / jsf, затем перейдите на вкладку «Привязки» внизу, перейдите к определению страницы (вы увидите его в верхней части страницы «Привязки»), и выделенный элемент выбора будет выделен. в файле определения страницы, который теперь открыт. Если вы посмотрите на инспектор свойств отсюда - есть свойство, называемое «SelectItemValueMode», по умолчанию оно имеет значение ListIndex, вы можете изменить его на ListObject отсюда. Это последнее свойство в списке для объекта списка выбора одного в окне свойств из файла определения страницы.

0 голосов
/ 29 марта 2012

Это не зависит от АПД.Это специфично для HTML.Отправляется только значение элемента HTML <input type="radio">, а не значение элемента HTML <label>, ссылающегося на него.Это верно для любого другого элемента HTML <input>, <select> и <textarea>.

Решение вашей «проблемы» простое: у вас уже есть все метки в вашем бобе в коллекции позади #{bindings.Version.items}.Просто получите оттуда метку на основе выбранного значения.

В качестве альтернативы, установите весь сложный объект (содержащий значение и метку) вместо только его значения в качестве значения элемента.Вам нужно только Converter для преобразования между сложным объектом и строкой.

...