繁体   English   中英

ADF中的selectOneChoice

[英]selectOneChoice in ADF

我刚接触ADF并遇到一些问题:我的页面中有一个af:selectOneChoice组件,其中包含数据列表。

当用户从selectOnceChoice组件列表中选择一个选项时,我想获取选定的值。

我已经将请求bean与参数一起使用,并将其绑定到组件的属性检查器的value选项中,但是它无法提供所选的值。 如何从selectOneChoice组件中获取选定的值?

您可以使用selectOnceChoice组件的ValueChangeListener valueChangeListener您可以将其绑定到bean类方法并调用API以获取selectOnceChoice组件的新值或旧值:

public void selectOnceChoiceValue(ValueChangeEvent valueChangeEvent){
    if(valueChangeEvent != null) {
        Object newVal = valueChangeEvent.getNewValue();
        Object oldVal = valueChangeEvent.getOldValue();
    }
}
<af:selectOneChoice id="soc1" simple="true" autoSubmit="true"
   valueChangeListener="#{ExtnEmailNotificationPFBean.recipientTypeValue}"
   label="#{''}"
   binding="#{ExtnEmailNotificationPFBean.recipientTypeValue}"
   partialTriggers="cl2"
   value="#{pageFlowScope.ZcxEaNotificationRecipientType}">
  <f:selectItems id="si4"
          value="#{pageFlowScope.ZcxEaRecipientsTypeValueList}"/>                  
</af:selectOneChoice>

根据您需要使用的值,一个选项是后备Bean中的以下方法

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

而且您的JSP组件应该看起来像

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

来自http://blogs.oracle.com/adf/entry/getting_selected_value_from_selectone选择

如果您正在寻找与支持该组件的视图对象的连接的更多信息,这将为您实时显示文本。

public void buttonPressed(ActionEvent actionEvent) {

    // Get the binding
    BindingContainer bindings =
    BindingContext.getCurrent().getCurrentBindingsEntry();
    // Get the sepecific list binding
    JUCtrlListBinding listBinding =
    (JUCtrlListBinding)bindings.get("DepartmentId");
    // Get the value which is currently selected
    Object selectedValue = listBinding.getSelectedValue();
    System.out.println(selectedValue);
}

http://blogs.oracle.com/shay/entry/getting_the_value_from_a_selec

如果我做对了,那么您的问题就是该值,您使用af:selectOneChoice选择的内容只有在提交后才能在bean上使用。 如果是这样,那么您应该让用户提交表单,或者将autoSubmit属性设置为true

应该这样做:

<af:selectOneChoice id="sampleId" 
value="#{bindings.sampleAttribute.inputValue}"
label="#{bindings.sampleAttribute.label}"
valueChangeListener=#"{Bean.valueChangeListener}"
immediate="true" autoSubmit="true">
    <f:selectItems id="sampleAttributeValues"
    value="#{bindings.sampleAttribute.items}"/>
</af:selectOneChoice>

并且该豆将具有:

public void valueChangeListener(ValueChangeEvent valueChangeEvent)
{
    FacesContext.getCurrentInstance().renderResponse();  
}

如果将autoSubmit属性设置为“ true”,请确保也将立即数设置为“ true”。 否则,将在页面级别触发验证。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM