2012-01-05 5 views
1

아마도 누군가가 나를 해결할 수 있습니다. 사용자가 목록에서 항목을 선택하고 결과를 기반으로 링크를 다시 렌더링하는 즉시 작업을 수행해야하는 h : selectOneMenu가 있습니다.selectOneMenu onchange를 기반으로 구성 요소를 다시 렌더링하십시오.

<h:selectOneMenu value="#{backingBean.itemSelected}" valueChangeListener="#{backingBean.methodThatDoesStuff}" onchange="submit()" > 
    <s:selectItems var="_items" value="#{backingBean.itemList}" 
        label="#{_items.Name}" /> 
    <s:convertEntity /> 
</h:selectOneMenu> 

내 가정은 사용자가 항목을 선택하면 그것은 백업 빈의 필드를 채우고 다음 methodThatDoesStuff를 실행하는 것이라고했다. 하지만 그건 일어나지 않습니다. 메소드가 호출 될 때까지 backingBean.itemSelected가 설정되지 않습니다. 이벤트를 가져 와서 직접 메서드에서 사용할 수 있습니다.

public void methodThatDoesStuff(ValueChangeEvent event){ 
     Item item = (Item)event.getNewValue(); 
      .... do stuff, set a flag to display link later 
    } 

이 방법이 효과적입니다.

그러나 그것이 null이됩니다 1 시간 있도록 이전 값으로 설정 내 aComponent의를, 잎, 다음 마지막 itemSelected (그래서 난 항상 뒤에 하나 있어요에 따라 설정을 변경합니다 :

public void methodThatDoesStuff(){ 

      Item item = this.itemSelected; 
       .... do stuff, set a flag to display link later 
     } 

나는 시도했다 :.?

<h:selectOneMenu value="#{backingBean.itemSelected}" > 
<s:selectItems var="_items" value="#{backingBean.itemList}" label="#{_items.Name}" /> 
<a:support event="onchange" ajaxSingle="true" reRender="aComponent" action="#{backingBean.methodThatDoesStuff}" /> 
<s:convertEntity /> 
</h:selectOneMenu> 

하지만 ValueChangeEvent 여부 사용 여부를 작동하지 않는 이벤트가 현재 선택한 항목을 얻을 수있는 유일한 방법은 객체를 사용 이 JSF 1.2 심 2

입니다
+0

응용 프로그램 이벤트 단계 전에 바운드 속성이 채워지지 않는 이유가 확실하지 않습니다. 유효성 검사 오류가 발생하여 값이 업데이트되지 않을 수 있습니다. 그럼에도 불구하고 각 단계에서 발생하는 문제에 대한 자세한 내용은 [BalusC Debug PhaseListener] (http://balusc.blogspot.com/2006/09/debug-jsf-lifecycle.html)를 구현하십시오. –

+2

'# '이 (가) 작업 속성에 없습니다. 이것은 빨간색 청어인가요? – BalusC

+0

미안하지만 BalusC, 오타입니다. – gebuh

답변

0

selectOneMenuimmediate="true" 속성을 설정하십시오.

+0

고맙습니다 Baz,하지만 그게 작동하지 않았다, 내가 시도한 첫 번째 물건 중 하나였습니다. – gebuh

관련 문제