使用f:param传递参数时,f:ajax不起作用

Par*_*ras 2 facelets jsf-2

我在点击链接时调用了一种方法。以下代码可以正常工作

                        <ui:repeat value="#{myBean.names}" var="name"
                               varStatus="idx">
                        <li>
                            <h:commandLink value="#{name.label}">
                                <f:ajax execute="@this" event="click" render="@all" listener="#{myBean.changeActiveName}" >
                                </f:ajax>
                            </h:commandLink>
                        </li>
                    </ui:repeat>
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将参数传递给Ajax调用时,它将开始刷新整个页面

                    <ui:repeat value="#{myBean.names}" var="name"
                               varStatus="idx">
                        <li>
                            <h:commandLink value="#{name.label}">
                                <f:ajax execute="@this" event="click" render="@all" listener="#{myBean.changeActiveName}" >
                                    <f:param name="idx" value="#{idx}" />
                                </f:ajax>
                            </h:commandLink>
                        </li>
                    </ui:repeat>
Run Code Online (Sandbox Code Playgroud)

此代码有什么问题?

Bal*_*usC 5

<f:param>必须是父母的孩子UICommand组成部分,而不是<f:ajax>

<h:commandLink value="#{name.label}">
    <f:param name="idx" value="#{idx}" />
    <f:ajax listener="#{myBean.changeActiveName}" render="@all" />
</h:commandLink>
Run Code Online (Sandbox Code Playgroud)

(请注意,由于您的定义已经是默认设置,因此我删除了executeevent属性;再加上我想知道将整个IterationStatus实例作为请求参数发送有何用处……也许您只是想发送索引而已?使用#{idx.index}替代项)

也可以看看: