我有一个JSF视图,列出了Primefaces DataTable中集合中的项目.最右边的列包含删除按钮.单击删除按钮时,应该进行Ajax调用,从会话变量Cart中删除相应的项目并就地更新视图.我希望请求和视图更改尽可能小.
以下是我为此目的所做的事情:
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui"> <h:head> <title>Register user</title> </h:head> <h:body> <f:view> <h:form id="itemsForm"> <p:outputPanel id="items"> <p:dataTable value="#{cart.itemList}" var="item"> <p:column> <f:facet name="header"> <h:outputText value="name" /> </f:facet> <h:outputText value="#{item.product.description}" /> </p:column> <p:column> <f:facet name="header"> <h:outputText value="quantity" /> </f:facet> <h:outputText value="#{item.quantity}" /> </p:column> <p:column> <f:facet name="header"> <h:outputText value="" /> </f:facet> <p:commandButton icon="ui-icon-close" title="remove from cart"> <p:ajax listener="#{cart.removeItem}" update="form:itemsForm" process="@this" /> </p:commandButton> </p:column> <f:facet name="footer"> Total amount: ${cart.totalAmount} </f:facet> </p:dataTable> </p:outputPanel> </h:form> </f:view> </h:body> </html>
因此,我在Cart.java中有以下方法
public void removeItem() { System.out.println("REMOVE REQUEST ARRIVED"); }
但是,当我单击删除按钮时,removeItem方法甚至不执行.
所以我的问题是:
1)我的Ajax调用有什么问题?我应该对XHTML做出哪些更改?
2)如何在removeItem方法中处理请求并返回响应?
3)如何更新显示totalAmount的页脚?
解决方法
您可以在actionListener中将#{item}作为方法调用的参数传递.
您的.xhtml页面应如下所示:
<p:dataTable id="cartTable" value="#{cart.itemList}" var="item"> <p:column> <f:facet name="header"> <h:outputText value="" /> </f:facet> <p:commandButton icon="ui-icon-close" title="remove from cart" actionListener="#{cart.removeItem(item)}" update="cartTable" /> </p:column> </p:dataTable>
这是ManagedBean的方法removeItem:
@ManagedBean @ViewScoped public class Cart { private List<Item> itemList; public void removeItem(Item item) { itemList.remove(item); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。