Jsf 2 ui:重复变量属性未按预期工作

Jsf 2 ui:重复变量属性未按预期工作,jsf-2,mojarra,Jsf 2,Mojarra,由于这个原因,我不得不在facelet中使用ui:repeat而不是c:foreach。然而,我遇到了这个问题,我想知道是否有人可以建议一个解决办法 <ui:repeat value="#{someBean.idCodes}" var="led"> <h:outputText id="mailbox-#{led}" value="#{someBean.getSomeValue(led)}" />

由于这个原因,我不得不在facelet中使用ui:repeat而不是c:foreach。然而,我遇到了这个问题,我想知道是否有人可以建议一个解决办法

<ui:repeat value="#{someBean.idCodes}"
           var="led">
           <h:outputText id="mailbox-#{led}" 
               value="#{someBean.getSomeValue(led)}" />
</ui:repeat>

第一个问题是#{led}引用的id属性没有得到计算。所有生成的id属性都只是值“mailbox-”。我需要使用document.getElementById()查找特定的元素实例,所以我需要生成的id属性

另一个我看不到解决方法的问题是,如果我将ui:repeat元素包装在一个h:panelGrid元素中,我最终得到一个包含一个单元格的表,而不是idCodes集合的每个成员一个单元格


使用c:foreach时,这两个问题都不存在,但使用该标记会导致其他问题。有什么建议吗?

请注意,id属性的类型是String,而不是ValueExpression。这就是为什么您的${led}没有被评估的原因。您可以尝试将每个元素包装在div或span中,并将该元素的id设置为基于${led}的表达式。

请注意,在中,id属性的类型是String,而不是ValueExpression。这就是为什么您的${led}没有被评估的原因。您可以尝试将每个元素包装在一个div或span中,并将该元素的id设置为基于${led}的表达式。

详细信息中的Debbil。你的建议奏效了。有趣的是为什么它会与c:foreach一起工作。我没有研究实现,但它表明有一个不同的过程来处理遵循不同规则的JSTL标记。这篇博客文章解释了JSTL标记的处理方式与本机JSF标记的不同,以及为什么混合使用这两种标记是个坏主意。这是一本每个JSF程序员都应该阅读的优秀读物。你的建议奏效了。有趣的是为什么它会与c:foreach一起工作。我没有研究实现,但它表明有一个不同的过程来处理遵循不同规则的JSTL标记。这篇博客文章解释了JSTL标记的处理方式与本机JSF标记的不同,以及为什么混合使用这两种标记是个坏主意。这是一本每个JSF程序员都应该阅读的优秀读物。