如果在c:forEach下,则不会获取div id

时间:2012-10-10 09:02:05

标签: jsf foreach jstl

我正在尝试使用以下代码将来自支持bean的id分配给div元素:

<c:forEach var="item" items="#{backingBean.dataModel}">
<t:div id="xyz_#{item.id}" forceId="true" forceIdIndex="false" title="#{item.name}" style="display:none">
    <ui:include src="#{item.view}">
        <ui:param name="id" value="#{item.id}" />
        <ui:param name="model" value="#{item.model}" />
    </ui:include>
</t:div>
</c:forEach>

首次加载页面时,它会根据辅助bean推断出正确的id。当我使用此代码刷新页面部分时,它不会调用辅助bean的getId方法,而是正确调用getView,getModel。结果,div具有不正确的Id。

可能会在c:forEach执行之前分配div id。当它在c:forEach中时,如何强制div使用来自支持bean的Id?

1 个答案:

答案 0 :(得分:2)

在视图构建期间(第一次构建JSF组件树时)评估JSF UI组件的id(和binding)属性,而不是在视图渲染时间期间或将来在后续回发到同一视图时重用相同的JSF组件树。

我不确定你为什么要用这样的<t:div>接近它。在这种特殊情况下使用纯HTML <div>会更有意义。

<c:forEach var="item" items="#{backingBean.dataModel}">
    <div id="xyz_#{item.id}" title="#{item.name}" style="display:none">
        <ui:include src="#{item.view}">
            <ui:param name="id" value="#{item.id}" />
            <ui:param name="model" value="#{item.model}" />
        </ui:include>
    </div>
</c:forEach>

另见: