У меня есть представление 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) Как обновить footer
, в котором отображается общая сумма?