我在支持bean中有一个HashMap,我想动态渲染多个选择框。这是代码:
<h:selectManyCheckbox
id="id"
value="#{backingBean.value}"
layout="pageDirection"
styleClass="label"
required="true"
requiredMessage="You must select at least...">
<a4j:repeat var="aGroup" items="#{backingBean.map}">
<f:selectItem id="role#{aGroup.value.property1}" itemLabel="#{aGroup.value.property1}" itemValue="#{aGroup.value.property2}" />
<rich:tooltip for="role" value="#{aGroup.value.property5}" />
</a4j:repeat>
</h:selectManyCheckbox>
它不是渲染。 使用f:selectItems标签,它正在渲染,但我需要手动创建f:selecteItem,因为我必须附加一个rich:tooltip和f:selectItem。
有什么想法吗?
拉维
答案 0 :(得分:1)
您无法在<f:selectItem>
上添加其他标记/组件。
标准JSF或RichFaces库中也没有任何内容允许在复选框组的标签上自由标记。将layout="spread"
与<t:checkbox>
一起使用时,只有Tomahawk <t:selectManyCheckbox>
支持此功能。 PrimeFaces的<p:selectManyCheckbox>
也有on schedule这个功能。
以下是如何使用Tomahawk实现它的启动示例:
<!-- Below displays nothing due to layout="spread". -->
<t:selectManyCheckbox id="foo" value="#{bean.selectedItems}" layout="spread">
<f:selectItems value="#{bean.availableItems}" />
</t:selectManyCheckbox>
<!-- Below displays the concrete checkboxes with labels. -->
<c:forEach items="#{bean.availableItems}" var="item" varStatus="loop">
<t:checkbox for="foo" index="#{loop.index}" />
<h:outputLabel id="label#{loop.index}" value="#{item.label}" />
<rich:tooltip for="label#{loop.index}" value="#{item.tooltip}" />
</c:forEach>
答案 1 :(得分:0)
使用<c:forEach>
代替<a4j:repeat>
。
首先在页面顶部添加此命名空间。
xmlns:c="http://java.sun.com/jstl/core"
现在用此替换<a4j:repeat.....
。
<c:forEach var="aGroup" items="#{backingBean.map}">
编辑:
<小时/> 我不认为<rich:toolTip>
可以应用于<f:selectItem>
。作为一个奇怪的黑客你可以做这样的事情。
这是managed-bean
,它会返回list
或map
。我在这里使用地图,因为看起来你正在使用地图。
public class MyBean {
private Map<Integer, String> map;
public Map<Integer, String> getMap() {
map = new HashMap<Integer, String>();
map.put(1, "Tool tip 1");
map.put(2, "Tool tip 2");
map.put(3, "Tool tip 3");
return map;
}
}
现在您的xhtml
代码就像这样。这里我动态地渲染selectItem
。但是,这不是必须的。
<h:form id="myForm">
<h:selectManyCheckbox id="myChkBox" layout="pageDirection" styleClass="label" required="true" requiredMessage="You must select at least...">
<c:forEach var="aGroup" items="#{myBean.map}">
<f:selectItem itemValue="someValue1" itemLabel="someValue1" id="someId#{aGroup.key}" />
<span class="rich-tool-tip" id="span#{aGroup.key}" style="z-index: 99; visibility: visible; display: none;">
<span>#{aGroup.value}</span>
</span>
<script>
var i = !i ? 0 : i;
new ToolTip("span#{aGroup.key}","myForm:myChkBox:" + i,{'showEvent':'mouseover'} );
i++;
</script>
</c:forEach>
</h:selectManyCheckbox>
<rich:toolTip rendered="false"/>
</h:form>
就是这样......
请注意<rich:toolTip>
设置为rendered="false"
。这是必需的。否则,某些重要的JS
部分不会导入,而toolTip
将无效。