2013-10-25 3 views
0

selectManyCheckbox의 my value 속성이 ajax를 통해 업데이트되는 wehn을 오버라이드합니다.h : selectManyCheckbox 선택한 값이 마지막 값으로 덮어 쓰기됩니다.

public class Parameter { 

    List<String> selectedValues; 
    SelectItemList values; 

    public void valueChanged(ValueChangeEvent event) { 
     // here new values and new selectedValues will be set via 
     // the setters of the two fields 
    } 

} 

문제는, 새로운 값을 설정하고 올바르게 표시됩니다 만, 그 selectedValues가있을 것입니다 : 여기 내 JSF이다 (1.2)

<h:selectManyCheckbox 
    id="SelectManyCheckbox" 
    valueChangeListener="#{parameter.valueChanged}" 
    value="#{parameter.selectedValues}"> 

    <a4j:support 
     event="onclick" 
     reRender="selectionPanel" /> 

    <f:selectItems 
     value="#{parameter.values}" /> 

</h:selectManyCheckbox> 

는이 매개 변수 클래스 (간체)입니다 ajax 이벤트 전의 값. 나는 그것을 디버깅하고 selectedValues ​​올바르게 설정되어 있지만 selectionPanel rerender 동안 ajax 이벤트 전에 이전 selectedValues ​​설정됩니다 볼 수 있습니다. 이처럼 내 selectedValues는 항상 이전 값을 덮어 씁니다 것을

내가 볼 수있는 이벤트를 여러 번 트리거

, :

  • 초기화. selectedValue (0)
  • 합니다 Event1 newSelectedValue가 (1,2,3,4), 실제로 selectedValue (0)
  • Event2 newSelectedValue 표시 : (5,6,7,8), 실제로 selectedValue 표시를 (1,2 3,4-)
  • Event3 newSelectedValue (9,10,11,12-)는 실제로 표시 selectedValue (5,6,7,8) 여기서
  • [...]

일부 selectedValue를 덮어 쓰는 스택 추적의 :

com.my.package.structure.Parameter:setSelectedValues 
sun.reflect.NativeMethodAccessorImpl:invoke0 
sun.reflect.NativeMethodAccessorImpl:invoke 
sun.reflect.DelegatingMethodAccessorImpl:invoke 
java.lang.reflect.Method:invoke 
javax.el.BeanELResolver:setValue 
javax.el.CompositeELResolver:setValue 
org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver:setValue 
org.apache.el.parser.AstValue:setValue 
org.apache.el.ValueExpressionImpl:setValue 
com.sun.facelets.el.TagValueExpression:setValue 
javax.faces.component.UIInput:updateModel 
javax.faces.component.UIInput:processUpdates 
+0

목록 대신지도를 사용하여 어떤 일이 발생하는지 확인하십시오. –

+0

지도 사용이 작동하지 않았습니다. 우리는 jsf 1.2에 있습니다. h : selectManyCheckbox는 목록 또는 배열 만 지원합니다. – user1735824

답변

0

해결책은 목록이 아닌 단순한 배열을 사용하는 것이 었습니다.

public class Parameter { 

    String[] selectedValues; //CHANGED 
    SelectItemList values; 

    public void valueChanged(ValueChangeEvent event) { 
     // here new values and new selectedValues will be set via 
     // the setters of the two fields 
    } 

} 
관련 문제