У меня есть представление JSF, в котором перечислены элементы в коллекции в Primefaces DataTable
. Самые правые столбцы содержат кнопки удаления. Когда нажата кнопка удаления, предполагается сделать вызов Ajax, удалить соответствующий элемент из переменной сеанса Cart
и обновить представление на месте. Я хотел бы, чтобы запрос и изменение представления были как можно более минимальными.Удаление одной строки из DataTable с использованием Ajax
Вот что я для этой цели:
<!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
, который отображает totalAmount?
Это не работает. Аннотирование '@ ViewScoped' вызывает исключение. Когда я меняю его на '@ SessionScoped', кнопка не отвечает. Ничего не происходит при нажатии. –
@Murat Я просто попытался привести пример, который можно использовать '# {item}' как параметр напрямую, без использования '. Вам определенно нужно переключить мой пример на свой собственный вариант использования. Я не могу догадаться, что вы должны дать вам 100% -ное рабочее решение. –
, за исключением того, что атрибут 'actionListener' должен быть« действием », правильно? –