2011-08-25 4 views
0

ADF를 처음 사용하고 몇 가지 문제점에 직면 해 있습니다. 데이터 목록이 포함 된 내 페이지에 af:selectOneChoice 구성 요소가 있습니다.ADF의 selectOneChoice

사용자가 selectOnceChoice 구성 요소 목록에서 하나의 옵션을 선택하면 선택한 값을 가져오고 싶습니다.

요청 빈을 매개 변수와 함께 사용하고 구성 요소의 속성 관리자에서 값 옵션으로 바인딩했지만 선택한 값을 제공하지 못했습니다. selectOneChoice 구성 요소에서 선택한 값을 얻으려면 어떻게해야합니까?

+0

jsf 소스를 게시하십시오. –

답변

3

ValueChangeListenerselectOnceChoice 구성 요소로 사용할 수 있습니다. valueChangeListener에서 당신이 빈 클래스 메서드에 바인딩 및 selectOnceChoice 구성 요소에 대한 신규 또는 이전 값을 얻기 위해 API를 호출 할 수

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

당신이 값을 하나의 옵션으로 무엇을해야하는지에 따라 다음 방법입니다 귀하의 백업 콩에

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

이렇게하면 구성 요소를 지원하는 뷰 객체에 대한 연결이 더 필요하면 실시간으로 표시된 텍스트가 표시됩니다. 내가 가지고있는 경우 http://blogs.oracle.com/shay/entry/getting_the_value_from_a_selec

0

에서

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

바로 당신의 문제는 당신이 후에 만 ​​제출, 콩에서 사용할 수 af:selectOneChoice로 선택한 그 값입니다. 그렇다면 사용자가 양식을 제출하게하거나 구성 요소의 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> 

을하고 빈 것 :

0

이 수행해야

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

당신은뿐만 아니라 "true"로 즉각적인를 설정해야합니다 "true"로 만들기 위해 autoSubmit 속성을 사용하는 경우 . 그렇지 않으면 페이지 수준에서 유효성 검사가 실행됩니다.