2012-03-29 41 views
0

我是JDeveloper和ADF的新手,我在从selectOneChoice组件获取选定值时遇到了一些问题。这是valuChangeListener:从ADF中的selectOneChoice获取选定值,而不是索引

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> 

感谢名单:)

回答

1

这是ORCLE的家伙是怎么做的

How-to get the selected af:selectOneChoice Label虽然在我看来,它可以在其他的方式来完成.. 。

我想你最好建立一个map其中指数将是关键和值是标签

比versionValueChangeListener则可以直接进入地图是这样的:

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

0

这不是ADF具体。这是HTML特定的。仅发送了HTML <input type="radio">元素的值,而不是HTML <label>元素的值。对于每个其他HTML <input>,<select><textarea>元素都是如此。

对“问题”的解决很简单:您的背景bean中的所有标签都位于#{bindings.Version.items}后面的集合中。只需根据所选值从该处获取标签即可。

或者,将整个复杂对象(包含值和标签)设置为项目值而不是其值。您只需要一个Converter即可在复杂对象和字符串之间进行转换。

0

jsp/jsf页面上有一个用于选择一个选项的属性,允许您传递实际对象值或从列表中传递索引值。单击jsp/jsf页面中的选择项,然后点击底部的绑定选项卡,转到页面定义(您将在绑定页面的顶部看到它),并且选中的一个选项将突出显示在现在打开的页面定义文件中。如果您从这里查看属性检查器 - 默认情况下有一个名为“SelectItemValueMode”的属性,它将设置为ListIndex值,您可以从此处将其更改为ListObject。它是在页面定义文件的属性窗口中为选择一个选择列表对象列出的最后一个属性。

+0

@BalusC - 这不是ADF具体的,如果你看过他的问题 - 这是JDeveloper的具体。 JDeveloper有超过3000页的手册是有原因的。 – GrrLex 2013-08-19 18:30:22

-1

你可以找到以下网址这种情况的解决方案: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势必selectOneChoice组件的value属性, 但是使用这个,我们得到的是所选项目的索引,而不是 。这是因为当我们将属性 SelectOneChoice拖放到页面上时,SelectItems会以 索引作为值生成。

显示到页面JSPX

在本节中选择的值,我们可以看到如何让选择的值,而无需编写Java代码 一行。创建一个outputText组件,其 value属性绑定到#{bindings.Deptno.attributeValue},而不是 #{bindings.Deptno.inputValue},并根据列表选择通过添加partialTriggers属性来使其可刷新。

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

上面的代码给出了所选项目的Deptno值。如果'SALES'的 Deptno是30,则将在outputText上显示30,其中 从列表中选择'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

尽管这个链接可能回答这个问题,但最好在这里包含答案的基本部分,并提供参考链接。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/11362471) – 2016-02-22 15:39:40

+0

@AdamMichalik做到了。谢谢你的评论。 – XpiritO 2016-02-22 16:09:29

相关问题