2011-08-25 80 views
0

我是ADF的新手,面臨一些問題:我的頁面中有一個af:selectOneChoice組件,其中包含數據列表。selectOneChoice in ADF

我想要在用戶從selectOnceChoice組件列表中選擇一個選項時獲取所選值。

我已經使用了請求bean和一個參數,並將它綁定到組件的屬性檢查器中的value選項,但是它沒有給出選定的值。我怎樣才能從selectOneChoice組件獲得選定的值?

+0

發佈jsf源碼。 –

回答

3

您可以使用ValueChangeListenerselectOnceChoice組件。在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> 
1

根據您需要的值一個選項做什麼是以下方法在您的支持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_selectonechoice

如果你正在尋找更多的連接到支持組件的視圖對象的連接,你會看到類似的東西,這將實時顯示你的文本。

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

0

如果我這樣做是正確,你的問題是該值,你已經與af:selectOneChoice選擇將可在綠豆,​​只能提交後。如果是這樣的話,那麼你應該讓用戶提交表單,或者將autoSubmit組件的屬性設置爲true

0

這應該這樣做:

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

和bean將有:

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

如果使用自動提交屬性設置爲「真」一定要設置直接爲「true」,以及。否則,將在頁面級激發驗證。