Проблемы с обновлением данных через командную ссылку
Я хотел сделать небольшое дополнение к образцу данных, который у них есть на простых лицах. Я хотел добавить еще один столбец, который должен был удалить некоторые данные. Это условие было установлено, если цвет автомобиля был белым или нет. У меня кнопка удаления отображается правильно, и я проверил, что вызывается actionListener и удаляю автомобиль из списка. Однако таблица данных не обновляется, даже если она отражена в списке. Всякий раз, когда я сортирую таблицу данных, список обновляется. Я хочу обновить его, как только я нажму "Удалить". Вот что у меня есть.
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<h:form>
<p:dataTable id="carTable" var="car" value="#{dtBasicView.cars}">
<f:facet name="header">
Car Table
</f:facet>
<p:column headerText="Id" sortBy="#{car.id}">
<h:outputText value="#{car.id}" />
</p:column>
<p:column headerText="Year" sortBy="#{car.year}">
<h:outputText value="#{car.year}" />
</p:column>
<p:column headerText="Brand" sortBy="#{car.brand}">
<h:outputText value="#{car.brand}" />
</p:column>
<p:column headerText="Color" sortBy="#{car.color}">
<h:outputText value="#{car.color}" />
</p:column>
<p:column headerText="Delete Option">
<p:commandLink actionListener="#{dtBasicView.deleteCar(car)}"
update="carTable" rendered="#{car.isWhite}" value="Delete" ajax="true">
<h:outputText value="Delete" />
</p:commandLink>
</p:column>
</p:dataTable>
</h:form>
</h:body>
</html>
Вот Java-часть.
@ManagedBean(name="dtBasicView")
@ViewScoped
public class BasicView implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private Car selectedCar;
private List<Car> cars;
private List<Car> oneHundredCars;
private int numberOfcars=0;
@ManagedProperty("#{carService}")
private CarService service;
@PostConstruct
public void init() {
oneHundredCars = service.createCars(10000);
}
public void setNumberOfcars(String num) {
this.numberOfcars = Integer.parseInt(num);
cars = oneHundredCars.subList(0, numberOfcars);
}
public List<Car> getCars() {
return cars;
}
public void setService(CarService service) {
this.service = service;
}
public Car getSelectedCar() {
return selectedCar;
}
public void setSelectedCar(Car selectedCar) {
this.selectedCar = selectedCar;
}
public boolean getIsEmpty() {
return cars == null || cars.isEmpty();
}
public void deleteCar(Car car) {
cars.remove(car);
}
}
2 ответа
Вы можете попробовать использовать update="@form"
, Похоже, что старая версия Primefaces страдает от ошибки при обновлении datatable из действия внутри datatable.
или Вы можете обновить до последней версии Primefaces.
commandLink должен быть внутри формы, также добавьте этот процесс тега в commandLink
<p:commandLink actionListener="#{dtBasicView.deleteCar(car)}"
update="carTable" rendered="#{car.isWhite}" value="Delete" ajax="true">
<h:outputText value="Delete" process="@this, tabla_carTable" /></p:commandLink>