【发布时间】:2016-05-14 17:39:14
【问题描述】:
我正在使用 JSF 2.2 和 Prime Faces 5.3。
我正在尝试创建一个带有动态选项的 html5 组件。 目标是创建类似于 f:selectItems 标签的东西
目前我有 datalist 标签的以下代码(datalist.xhtml 文件)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns:cc="http://xmlns.jcp.org/jsf/composite">
<cc:interface></cc:interface>
<cc:implementation>
<datalist id="#{cc.attrs.id}">
<cc:insertChildren/>
</datalist>
</cc:implementation>
</html>
以及单个选项的以下内容(option.xhtml 文件)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns:cc="http://xmlns.jcp.org/jsf/composite">
<cc:interface>
<cc:attribute name="value" type="java.lang.String" default=""/>
<cc:attribute name="label" type="java.lang.String" default=""/>
</cc:interface>
<cc:implementation>
<option value="#{cc.attrs.value}" label="#{cc.attrs.label}"/>
</cc:implementation>
</html>
通过这种方法,我可以创建类似的东西
<myTag:dataList id="test">
<myTag:option value="1" label="label1"/>
<myTag:option value="2" label="label2"/>
<myTag:option value="3" label="label3"/>
</myTag:dataList>
但我需要一些能让我拥有动态选项列表的东西。我希望编写以下代码(或类似代码)
<myTag:dataList id="test">
<myTag:options value="#{myBean.myCollection}" var="mySingleObj" itemValue="mySingleObj.value" itemLabel="mySingleObj.label"/>
</myTag:dataList>
你能帮帮我吗? 谢谢!
【问题讨论】:
-
为什么不使用简单的 h:selectOneMenu 之类的?您可以在 cc 中使用 ui:repeat 来迭代您的选项。或者你可以复制butterfaces.org/butterfaces-showcase/treebox.jsf的一些代码,自己构建一个java组件。
-
因为,通过 datalist,您可以使用来自 html 5 的自动完成功能
-
所以我更喜欢使用 ButterFaces 或者只是复制代码。 TreeBox 以简单的方式支持列表、树和自动完成。
标签: jsf options composite-component html-datalist