<h:form>
<ui:repeat value="#{sampleManagedBean.food}" var="food">
<h:commandLink value="Name" action="#{sampleManagedBean.outcome}">
<f:param name="name" value="ssd" />
<f:param name="v" value="#{food.boy}" />
</h:commandLink>
<h2>#{food.boy}</h2>
</ui:repeat>
</h:form>
我无法获得基于<f:param>
设置的第二个<ui:repeat var>
值。我只能得到第一个硬编码的。
答案 0 :(得分:0)
ui:repeat
是一个UI组件,而f:param
是一个标签处理程序(如JSTL)。 Taghandler在视图构建时运行之前在视图渲染时运行的UI组件之前运行
(see here)。
在我们的案例中,这意味着在视图构建阶段f:param
对#{food.boy}
一无所知。 c:forEach
会很好,但如果我们调用某种ajax动作来更改
#{sampleManagedBean.food}
的大小并重新呈现表单,我们就不会在页面上看到任何更改。因为部分重新呈现(ajax)仅影响UI组件树。 c:forEach
介于硬编码和ui:repeat
之间,我们必须重新加载页面以查看更改。
答案 1 :(得分:0)
试试这个,
<h:form>
<ui:repeat value="#{sampleManagedBean.food}" var="food">
<h:commandLink value="Name" action="#{sampleManagedBean.outcome}">
<f:setPropertyActionListener value="ssd" target="#{sampleManagedBean.name}" />
<f:setPropertyActionListener value="#{food.boy}" target="#{sampleManagedBean.v}" />
</h:commandLink>
</ui:repeat>
</h:form>