【问题标题】:f:ajax doesn't work when parameters are passed using f:param使用 f:param 传递参数时 f:ajax 不起作用
【发布时间】:2012-08-06 16:54:46
【问题描述】:

我在点击链接时调用一个方法。以下代码 ajaxfully 工作

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

但是当我尝试将参数传递给 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>

这段代码有什么问题?

【问题讨论】:

    标签: jsf-2 facelets


    【解决方案1】:

    &lt;f:param&gt; 必须是父组件 UICommand 的子组件,而不是 &lt;f:ajax&gt; 的子组件。

    <h:commandLink value="#{name.label}">
        <f:param name="idx" value="#{idx}" />
        <f:ajax listener="#{myBean.changeActiveName}" render="@all" />
    </h:commandLink>
    

    (请注意,我删除了 executeevent 属性,因为您的定义已经是默认值了;另外我想知道将整个 IterationStatus 实例作为请求参数发送有什么用......也许你只是想发送索引?使用#{idx.index} 左右)

    另见:

    【讨论】:

    • 谢谢。那行得通。我对在 stackoverflow 上找到的一些示例感到困惑。是的,我也删除了默认值,现在使用 idx.index。谢谢
    猜你喜欢
    • 2012-05-10
    • 1970-01-01
    • 2016-09-22
    • 2017-05-15
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多