我目前有一个带有条件删除按钮的primefaces数据表,如果单击该按钮将删除该行。点击它第一次工作。它将删除该行,表将使用新表刷新。当我再次尝试从表中删除某些内容时,该表将自动刷新而没有任何条目。如果我使用我创建的其中一个按钮更新表,那么该表将再次显示我尝试删除的条目。调查一下,我看到当我成功删除第一个方法时,正在调用该方法。但是,当我再次尝试时,不会调用该方法。为什么不呢?
<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 action="#{dtBasicView.deleteCar(car)}"
update="@form" rendered="#{car.isWhite}" value="Delete" ajax="true">
</p:commandLink>
</p:column>
</h:form>
</h:body>
</html>
豆子
@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(100);
}
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);
int size = cars.size();
setNumberOfcars(""+size);
}
}
稍微更新一下:我还没有解决我的问题。我已经改变了一些东西,以便列表不可调整大小。现在每当我点击第二个删除命令链接时,整个数据表都会被新的随机数据刷新。
另一次更新:看到它在点击第二次删除后再次调用@PostConstruct。通过这样做,它正在重建一整套新的汽车阵列。
答案 0 :(得分:0)
昨天花了整整一天试图弄清楚为什么会这样,我终于解决了。我已将commandlink更改为commandbutton,这些更改都没有奏效。对我有用的不是让按钮成为ajax提交,而是非ajax提交。我仍然不知道为什么会这样,所以如果有人能解释它会有很大帮助。