2011-11-21 4 views
0

오브젝트와 부울로 구성된 해시 맵을 내보기에 전달하고 각 오브젝트의 부울 값을 표시하고 현재 다음 코드가 있습니다.JSF 체크 상자에 값을 표시하는 nog 반복

<ui:repeat var="item" value="#{userTypeController.permissionItems}"> 
        <h:outputText value="#{item}" /> 
        <h:selectBooleanCheckbox value="#{userTypeController.checkMap[item]}"/> 
    </ui:repeat> 

그리고 HashMap의 방법

그러나, 체크 박스 자체는 확인되지 않습니다

public Map<Permission, Boolean> getCheckMap() { 
    checkMap = null; 
    for (Permission p : getPermissionItems()) { 
     if (getPermissionItemsUserType().contains(p)) 
      checkMap.put(p, Boolean.TRUE); 
     else 
      checkMap.put(p, Boolean.FALSE); 
     System.out.println(checkMap.get(p).toString()); 
    } 
    return checkMap; 
} 

이 작동해야하며에서 System.out.println 동안 내가 진정한 출력을 볼 수 ... .. 어떤 이드 든 내가 여기서 뭘 잘못하고있는 거지?

답변

0

당신이 묘사하는 증상은 2.1.1에 우연히 고정되어 있으며 2.1.4에서 공식적으로 고쳐진 Mojarra bug 1807과 일치합니다. 따라서 Mojarra는 최소한 2.1.1에서 upgrading해야합니다.

코드에 큰 버그가 있음을 유의하십시오. checkmap을 아무데도 인스턴스화하지 않으면 NullPointerException이 던져 질 것입니다.하지만이 코드는 지나치게 단순화 된 것 같습니다. 또한 게터 내부에서이를 수행하는 것은 나쁜 생각입니다. (post) 구조 또는 이벤트 리스너 메소드 중에 수행되어야합니다. 렌더링 응답 중에 getter를 두 번 이상 호출 할 수 있습니다. Why JSF calls getters multiple times도 참조하십시오.

+0

2.1.4로 업그레이드해도 여전히 동일한 문제가 발생합니다. 다른 시도가 있습니까? – SnIpY

+0

글쎄, getter에서 로직을 사용하지 말고, (post) 생성자 또는 렌더링 응답 단계 이전에 한 번만 호출 된 메소드에서. 그렇지 않으면 유효한 SSCCE가 도움이됩니다. 버그가 포함되어 있기 때문입니다. – BalusC

관련 문제