1

我正在尝试将参数传递给 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}" />allong 与 ajax 标记一起使用,但这会导致重复的组件 ID 表单:图片,因为它处于循环中。我需要在方法中使用此参数以确定要删除的图片。我怎样才能用ajax解决这个问题?

我正在使用@ViewScoped CDI-bean。

4

1 回答 1

4

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

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

就是这样。不要复杂化。

顺便说一句,primefacescommandButton默认发送 AJAX 请求,你不需要(而且你不能使用)f:ajax标签。

于 2013-02-14T19:54:47.197 回答