无法多次删除数据表中的行



我目前有一个带有条件删除按钮的primefaces datatable表,如果单击该按钮将删除行。第一次点击它是有效的。它将删除该行,并用新表刷新表。当我再次尝试从表中删除某些内容时,表将在没有条目的情况下自行刷新。如果我使用我创建的一个按钮更新表,表将再次显示,我试图删除的条目仍然在那里。查看它,我看到当我成功删除第一个时,正在调用正在操作的方法。但是,当我再次尝试时,没有调用该方法。为什么不呢?

<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。通过这样做,它正在重建一套全新的汽车阵列。

昨天花了一整天的时间试图弄清楚为什么会发生这种情况,我终于解决了它。我已经将命令链接更改为命令按钮,这些更改都不起作用。对我来说有效的是让按钮不是ajax提交,而是非ajax提交。我仍然不知道为什么这工作,所以如果有人可以解释这将是很大的帮助。

相关内容

  • 没有找到相关文章

最新更新