2013-02-14 62 views
1

我想一个参数传递给一个AJAX事件参数,这就是我的意思的例子:JSF:通过内环路

<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尝试,虽然这会导致重复组件ID形式:图片,因为它是一个循环。 我需要此方法内的参数,以确定要删除的图片。 如何用ajax解决这个问题?

我使用的是@ViewScoped CDI豆。

回答

3

首先,我建议用ui:repeat标签更换c:forEach。其次,当你使用Primefaces时,你应该尽其所能。所以,commandButton可以更容易地编写:

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

就是这样。不要复杂。

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

+1

+1 iirc它甚至不会使用f:ajax – 2013-02-14 19:56:38

+0

@Partlov。我使用'C:forEach'因为'UI:repeat'不会与'^ h工作:因为panelGrid''UI:repeat'是渲染时间标记。我将用'p:commandButton'来尝试解决方案。 @KarlKildén。它将与'f:ajax'一起工作,尽管没有参数。 – Aquillo 2013-02-14 19:58:08

+0

出于某种原因与Primefaces' AJAX解决方案将仅成功一次后,它不会做任何事情了。我相关的问题,这是解释:http://stackoverflow.com/questions/14796984/primefaces-selectcheckboxmenu-executes-ajax-just-once – Aquillo 2013-02-14 20:02:40