使用<ui:repeat> var </ui:repeat> </f:param>设置<f:param>值

时间:2012-05-18 05:51:29

标签: jsf uirepeat

<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>值。我只能得到第一个硬编码的。

2 个答案:

答案 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>