Nik*_*iko 10 forms jsf el identifier
我有以下代码:
<ui:repeat var="class2" value="#{bean.list}" varStatus="status">
<h:form id="#{class2.name}">
<h:outputText value="#{class2.name}" />
</h:form>
</ui:repeat>
Run Code Online (Sandbox Code Playgroud)
但是,当我打开页面时,它的错误如下:
组件标识符不能是零长度字符串
但它正确地印在了<h:outputText>.这是怎么造成的,我该如何解决?
Bal*_*usC 25
您可以在idJSF组件的属性中使用EL ,但EL变量必须在视图构建期间可用,同时要构建JSF组件树.但是,<ui:repeat>在视图渲染时运行时,而HTML输出将基于JSF组件树生成.该<ui:repeat var>不是在视图生成时可用,#{class2.name}计算结果为null这完全说明你得到了错误.它的作用<h:outputText>是因为它在视图渲染时运行.
如果你替换<ui:repeat>为<c:forEach>,在视图构建期间运行,那么它将按你的意图工作.的<c:forEach>意愿即产生物理上的多个<h:form>在JSF组件树,其中每个单独生成自己的HTML输出(在相反的部件<ui:repeat>,其中所述非常相同<h:form>部件被重复使用多次,以产生HTML输出).
<c:forEach var="class2" items="#{bean.list}" varStatus="status">
<h:form id="#{class2.name}">
<h:outputText value="#{class2.name}" />
</h:form>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
但是,我真的很想知道为什么你需要这样做.通常无需动态分配组件ID.JSF已经确保了ID的唯一性.以下示例,
<ui:repeat var="class2" value="#{bean.list}" varStatus="status">
<h:form id="form">
<h:outputText value="#{class2.name}" />
</h:form>
</ui:repeat>
Run Code Online (Sandbox Code Playgroud)
将以多种形式结束,每个形式都有一个唯一的ID,后缀为迭代索引<ui:repeat>.如果你真的需要#{class2.name}用于一些JavaScript/jQuery目的(你没有说明问题的具体功能要求,你认为这将是正确的解决方案,所以它只是猜测),然后只需将它包装在普通的香草中HTML元素:
<ui:repeat var="class2" value="#{bean.list}" varStatus="status">
<div id="#{class2.name}">
<h:form id="form">
<h:outputText value="#{class2.name}" />
</h:form>
</div>
</ui:repeat>
Run Code Online (Sandbox Code Playgroud)
或者将其设置为JSF组件的样式类,也可以通过CSS选择器进行选择:
<ui:repeat var="class2" value="#{bean.list}" varStatus="status">
<h:form id="form" styleClass="#{class2.name}">
<h:outputText value="#{class2.name}" />
</h:form>
</ui:repeat>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8957 次 |
| 最近记录: |