Dan*_*iel 9 jsf facelets jsf-2 uirepeat
我正在尝试为一个id分配一个id:在ui中的panelGroup:repeat
像那样
<ui:repeat value="#{bean.columns}" var="column">
<h:panelGroup layout="block" id="column_#{column.id}"
styleClass="#{column.id} dashboard_column">
Run Code Online (Sandbox Code Playgroud)
问题是,id值正在styleClass值中正确放置,但它没有在id属性中设置,所有在id属性中设置的都是由JSF +我的硬编码值"column_"自动生成的id.
如果我删除硬编码"column_"我得到一个例外
java.lang.IllegalArgumentException:组件标识符不能是零长度的String
有任何想法吗?
Bal*_*usC 13
使用诸如的渲染时标记是不可能的<ui:repeat>.该<ui:repeat>但是本身并通过与行索引前面加上已经保证生成的客户端ID的唯一性.因此,只需从组件的ID属性中删除EL部分即可.
使用视图构建时间标记<c:forEach>(基本上将生成多个<h:panelGroup>组件而不是仅多次呈现多个组件),可以指定这样的动态ID.
<ui:repeat value="#{bean.columns}" var="column">
<h:panelGroup layout="block" id="column">
Run Code Online (Sandbox Code Playgroud)
(你应该只清楚 JSTL在Facelets中的工作原理)
另一种方法是使用静态<div>元素而不是JSF <h:panelGroup layout="block">组件.
<c:forEach items="#{bean.columns}" var="column">
<h:panelGroup layout="block" id="column_#{column.id}">
Run Code Online (Sandbox Code Playgroud)
小智 6
JSF自动为id添加前缀.如果你只是写id ="column",生成的HTML将包含这样的标识符:
myForm:0:列myForm:1:列myForm:2:列
等等.
无论如何:永远不要在JSF模板中使用JSTL标签(如c:foreach和c:if).它们会导致随机行为,很难调试.如果它们有效,那么应用程序的运行速度会慢下来.
使用ui:repeat for循环,ui:fragment用于条件块.请注意,c:set没有替换,这样的构造在JSF 2中不再存在.
| 归档时间: |
|
| 查看次数: |
14112 次 |
| 最近记录: |