【问题标题】:Trouble updating datatable with commandlink使用 commandlink 更新数据表时遇到问题
【发布时间】:2014-05-29 15:17:13
【问题描述】:

我想对primefaces 上的示例数据表做一点补充。我想添加另一列来删除一些数据。如果汽车的颜色是否为白色,则设置此条件。我正确呈现了删除按钮,并且检查了是否正在调用 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);
    }
}

【问题讨论】:

  • 您的数据表周围有&lt;h:form&gt; 吗?
  • 是的,我只是没有发布它。我会更新的。

标签: jsf primefaces datatable xhtml commandlink


【解决方案1】:

您可以尝试使用update="@form"。从数据表中的操作更新数据表时,旧版本的 primefaces 似乎存在错误。

或者您可以升级到最新的 Primefaces。

http://blog.primefaces.org/?p=2119

【讨论】:

  • 这就是修复它的原因。我目前正在使用 primefaces 3.1,它与您所说的旧版本的 primefaces 有错误的说法相符。
【解决方案2】:

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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    相关资源
    最近更新 更多