我有一个p:selectManyCheckbox,它可以正常工作:
<p:selectManyCheckbox id="groups" value="#{myBean.selectedGroups}">
<f:selectItems value="#{myBean.myGroups}" var="group" itemValue="#{group.id}" itemLabel="#{group.name}"/>
</p:selectManyCheckbox>
Run Code Online (Sandbox Code Playgroud)
现在我必须将它转换为Tree组件(将Group parent添加到数据),但我的PrimeFaces版本为3.4.1.不支持这样的功能.为了更好地定制我决定手动使这个selectManyCheckbox使用HTML和<ui:repeat>):
<div id="j_idt25groups" class="ui-scrollpanel ui-scrollpanel-native ui-widget ui-widget-content ui-corner-all" style="height: 200px;">
<table id="groups" class="ui-selectmanycheckbox ui-widget">
<tbody>
<ui:repeat value="#{myBean.myGroups}" var="group" varStatus="status">
<tr>
<td>
<div class="ui-chkbox ui-widget">
<div class="ui-helper-hidden-accessible">
<ui:fragment rendered="#{myBean.selectedGroups.contains(group.id)}">
<input id="groups:#{status.index}" name="groups" type="checkbox" value="#{group.id}"
checked="checked">
</input>
</ui:fragment>
<ui:fragment rendered="#{not myBean.selectedGroups.contains(group.id)}">
<input id="groups:#{status.index}" name="groups" type="checkbox" value="#{group.id}">
</input>
</ui:fragment>
</div>
<div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default">
<span class="ui-chkbox-icon"></span>
</div>
</div>
</td>
<td>
<label for="groups:#{status.index}">#{group.name}</label>
</td>
</tr>
</ui:repeat>
</tbody>
</table>
</div>
Run Code Online (Sandbox Code Playgroud)
现在我有这个代码的问题#{prpBean.selectedGroups.contains(group.id)}:
java.lang.IllegalAccessException: Class javax.el.BeanELResolver can not access a member of class java.util.Arrays$ArrayList with modifiers "public"
Run Code Online (Sandbox Code Playgroud)
有可能解决这个问题吗?是否存在将此类结构转换为树的更简单方法?
Java反射无法立即访问该contains()方法java.util.Arrays$ArrayList.这可能是正在使用的EL实现中的(极端情况)错误.它可以在不同的EL实现中工作.可能值得向EL实现供应商提供错误报告,但它就是这样.
在创建时selectedGroups,使用new ArrayList()而不是Arrays#asList()所有应该是好的.
| 归档时间: |
|
| 查看次数: |
1407 次 |
| 最近记录: |