#jsf #primefaces
#jsf #начертания
Вопрос:
Я работаю в проекте jsf. У меня есть таблица, в которой будут отображаться данные из базы данных и добавлена одна пустая строка для заполнения пользователями информации. После заполнения первой пустой строки.(На рисунке, после заполнения строки № 2) динамически добавляется новая строка. После заполнения второй строки и добавления третьей строки таблица обновляется.
У меня здесь 2 проблемы.
Во-первых, если пользователь изменит итоговые продажи с 1000 до 2000, когда таблица будет обновлена после вызова ajax, итоговые продажи снова вернутся к 1000. (Если общее изменение пользователя составляет от 1000 до 2000, я хочу получить новое значение, равное 2000, и обновить данные в базе данных позже)
Во-вторых, если пользователь заполнит информацию в новой добавленной строке (в данном случае строка № 3) и при добавлении строки № 4 таблица будет обновлена, а строка № 3 покажет пустую строку.
Я хочу, чтобы таблица могла отображать данные, которые пользователь заполняет или изменяет, даже после того, как таблица была обновлена в результате вызова ajax.
Есть какие-нибудь советы? Мне нужна помощь. Я действительно не знаю, как это сделать. Ваша помощь будет очень признательна!
Это мой код.
lt;p:panelGrid styleClass="panel"gt; lt;p:rowgt; lt;p:column styleClass="ui-widget-header"gt; lt;p:outputLabel value="No." /gt; lt;/p:columngt; lt;p:column styleClass="ui-widget-header"gt; lt;p:outputLabel value="OrderDate" /gt; lt;/p:columngt; lt;p:column styleClass="ui-widget-header"gt; lt;p:outputLabel value="TotalSales" /gt; lt;/p:columngt; lt;/p:rowgt; lt;ui:repeat value="#{myBean.dataList}" var="list"gt; lt;p:rowgt; lt;p:column styleClass="ui-widget-header"gt; lt;p:outputLabel value="#{list.orderNo}" /gt; lt;/p:columngt; lt;p:columngt; lt;p:inputText value="#{list.orderDate}"/gt; lt;/p:columngt; lt;p:column gt; lt;p:inputText value="#{list.totalSales}" gt; lt;p:ajax event="blur" update="@(.panel)" listener="#{myBean.addLine(orderNo)}"/gt; lt;/p:inputTextgt; lt;/p:columngt; lt;/p:rowgt; lt;/ui:repeatgt; lt;/p:panelGridgt;
Backing Bean
@Named @SessionScoped public class myBean extends UpBaseBean { @Setter @Getter private orderDTO dataList = new orderDTO(); . . . . . /** * */ @UpBackingBean public void addLine(final int orderNo) { salesDTO dto = new salesDTO(); dto.setShikanName(shikanName); dto.setOrderDate(""); dto.setTotalSales(""); dataList.getSalesData.add(dto); } }
DTO
@Getter @Setter public class orderDTO extends BaseDTO { Listlt;salesDTOgt; salesData = new ArrayList(); } @Getter @Setter public class salesDTO extends BaseDTO { public int orderNo; public Date orderDate; public String totalSales; }
Комментарии:
1. В
p:ajax
вы обновляете всю панель, не обрабатывая значение в(), поэтому они возвращаются в состояние на стороне сервера. Вы можете обработать каждоеinputText
изменение события или обработать всю форму в вашем ajax. Вам следует также рассмотреть возможность переключения на другой компонент, возможно, на редактируемую таблицу данных.2. Спасибо! Я заставил его работать, добавив процесс в компонент