我将创建一个带复选框的列表。像gmail邮箱一样的东西。我在HTML h:selectManyCheckbox
标记中使用f:selectItem
,table
。但是jsf标签,itselft创建一个表并破坏我的表单。 id怎么能对jsf标签说再创建input
标签了?
以下是我的代码的和平:
<tbody>
<h:selectManyCheckbox value="#{MemberControl.selectedUser}">
<c:forEach items="#{MemberSearchControl.members}" var="member" varStatus="status">
<tr>
<td><f:selectItem itemValue="#{member.id}"></f:selectItem> </td>
<td><span>#{member.lastName}</span></td>
<td><span>#{member.firstName}</span></td>
<td><span>#{member.shareCount}</span></td>
<td><span>#{member.phone}</span></td>
</tr>
</c:forEach>
</h:selectManyCheckbox>
</tbody>
在下面你可以看到结果:
您是否在正确的位置有移动复选框的解决方案? (我使用纯jsf而不是primefaces或更多) 感谢。
答案 0 :(得分:1)
此行为与documented相同。你试图解决这个问题绝对没有意义。 <c:forEach><f:selectItem>
应该只是<f:selectItems>
,您应该为作业使用自定义渲染器。 Tomahawk之前已经为您完成了它,<t:selectManyCheckbox>
layout="spread"
属性设置,以及在所需位置声明的<t:checkbox>
组件,允许您完全控制标记:
<!-- This piece renders _nothing_. -->
<t:selectManyCheckbox id="foo" value="#{bean.selectedItems}" layout="spread">
<f:selectItems value="#{bean.availableItems}" />
</t:selectManyCheckbox>
<!-- You can markup those the way you want. They solely render <input>. -->
<t:checkbox for="foo" index="0" />
<t:checkbox for="foo" index="1" />
<t:checkbox for="foo" index="2" />
<t:checkbox for="foo" index="3" />
...
另一种方法是修复CSS样式。它看起来太过于过度概括table
,tr
,td
等样式,以便应用于所有这些元素,而不仅仅是那些特定的样式类,例如table.datatable
的{{1}}。