2011-11-21 73 views
0

我将由对象+布尔值组成的哈希表传递到我的视图中,我想显示每个对象的布尔值的值,并且当前有以下代码:JSF在复选框中显示数值的重复数字

<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我看到一个真正的输出...

然而,复选框本身从不检查.. 。任何ID对我在做什么错在这里?

回答

0

您描述的症状匹配Mojarra bug 1807,这是巧合在2.1.1中固定的,并在2.1.4中正式修复。所以,upgrading莫哈拉至少2.1.1应该做的。

请注意,您的代码中存在重大错误。你无处举例checkmap,它会抛出一个NullPointerException,虽然这似乎是简单的问题的代码。另外,在吸气剂中做这件事是一个坏主意。它应该在(post)构造或事件监听器方法期间完成。在渲染响应期间,可以多次调用getter。另见Why JSF calls getters multiple times

+0

升级到2.1.4,仍然有同样的问题...还有什么我可以尝试? – SnIpY

+0

那么,不要在getter中执行逻辑,而要在(post)构造函数或任何在渲染响应阶段之前只调用一次的方法。否则,有效的SSCCE会很有帮助,因为你的包含错误。 – BalusC