将参数传递给c:foreach循环中的f:ajax



我正试图将一个参数传递给ajax事件,这是我的意思的一个例子:

<h:panelGrid id="pictures" columns="3">
    <c:forEach items="#{createProduct.pictures}" var="picture">
        <h:graphicImage value="#{picture.source}" />
        <h:inputText value="#{picture.alt}" />
        <p:commandButton value="Remove">
            <f:ajax execute="@form" 
                    listener="#{createProduct.removePicture(picture)}" 
                    render="@form" />
        </p:commandButton>
    </c:forEach>
</h:panelGrid>

我知道这段代码不起作用,因为您无法通过ajax侦听器传递参数。尽管这只是我努力实现目标的一个例子。我曾尝试将<f:param id="picture" value="#{picture}" />与ajax标记一起使用,尽管这会导致重复的组件ID形式:picture,因为它处于循环中。我需要在方法中使用此参数来确定要删除的图片。如何使用ajax解决此问题?

我使用的是@ViewScoped CDI bean。

首先,我建议用ui:repeat标记替换c:forEach。其次,当你使用Primefaces时,你应该使用它的所有力量。因此,commandButton可以更容易地编写:

<p:commandButton value="Remove" process="@form" update="@form" action="#{createProduct.removePicture(picture)}"/>

就这样,不要复杂化。

顺便说一下,默认情况下,primefaces commandButton是发送AJAX请求的,您不需要(也不能使用)f:ajax标签。

相关内容

  • 没有找到相关文章

最新更新