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

时间:2014-05-29 16:51:26

标签: jsf primefaces datatable

我目前有一个带有条件删除按钮的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。通过这样做,它正在重建一整套新的汽车阵列。

1 个答案:

答案 0 :(得分:0)

昨天花了整整一天试图弄清楚为什么会这样,我终于解决了。我已将commandlink更改为commandbutton,这些更改都没有奏效。对我有用的不是让按钮成为ajax提交,而是非ajax提交。我仍然不知道为什么会这样,所以如果有人能解释它会有很大帮助。