【问题标题】:p:dataTable selected row always nullp:dataTable 选择的行始终为空
【发布时间】:2016-03-27 13:29:19
【问题描述】:

我的示例基于 p:dataTableContextMenu example 的 PrimeFaces 展示示例

不同之处在于我试图通过p:confirmDialog 删除,但所选项目始终为空。

这是一个精简的例子

XHTML

<!DOCTYPE html>
<html xmlns="http://www.w3c.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:p="http://primefaces.org/ui"
    xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
    <title>Example</title>s
</h:head>
<h:body>
    <h:form>
        <p:confirmDialog widgetVar="cd" severity="alert" header="Confirmation"
            message="Are you sure you wish to delete this car?">
            <p:commandButton value="Yes" action="#{carTableView.deleteCar}"
                update=":dataForm" oncomplete="PF('cd').hide();" />
            <p:commandButton value="No" onclick="PF('cd').hide();" type="button" />
        </p:confirmDialog>
    </h:form>
    <h:form id="dataForm">
        <p:contextMenu for="cars">
            <p:menuitem value="Delete" icon="ui-icon-close"
                onclick="PF('cd').show(); return false;" />
            <!--    action="#{formsView.deleteForm}" update=":dataForm" /> -->
        </p:contextMenu>
        <p:dataTable id="cars" var="car" value="#{carTableView.cars}"
            rowKey="#{car.id}" selection="#{carTableView.selectedCar}"
            selectionMode="single">
            <f:facet name="header">
                            RightClick to View Options
                        </f:facet>
            <p:column headerText="Id">
                <h:outputText value="#{car.id}" />
            </p:column>
            <p:column headerText="Name">
                <h:outputText value="#{car.name}" />
            </p:column>
        </p:dataTable>
    </h:form>
</h:body>
</html>

模型

public class Car
{

    private String id;

    private String name;

    public Car(String id, String name)
    {
        this.id = id;
        this.name = name;
    }

    public String getId()
    {
        return id;
    }

    public void setId(String id)
    {
        this.id = id;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

}

还有豆子

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@SuppressWarnings("serial")
@ManagedBean
@ViewScoped
public class CarTableView implements Serializable
{

    private List<Car> cars;

    private Car selectedCar;

    @PostConstruct
    public void init()
    {
        cars = createCars();
    }

    private List<Car> createCars()
    {
        List<Car> list = new ArrayList<Car>();
        for (int i = 0; i < 10; i++)
        {
            list.add(new Car(UUID.randomUUID().toString().substring(0, 8), "Car " + String.valueOf(i + 1)));
        }

        return list;
    }

    public void deleteCar()
    {
        cars.remove(selectedCar);
        selectedCar = null;
    }

    public List<Car> getCars()
    {
        return cars;
    }

    public void setCars(List<Car> cars)
    {
        this.cars = cars;
    }

    public Car getSelectedCar()
    {
        return selectedCar;
    }

    public void setSelectedCar(Car selectedCar)
    {
        this.selectedCar = selectedCar;
    }

}

现在在我看来,问题在于从 p:confirmDialog 运行 deleteCar 操作。

我这样说就像我改变了

<p:menuitem value="Delete" icon="ui-icon-close"
        onclick="PF('cd').show(); return false;" />

<p:menuitem value="Delete" icon="ui-icon-close"
        action="#{formsView.deleteForm}" update=":dataForm" />

然后就可以了。在p:confirmDialog 示例中,deleteCar 方法中的selectedCar 始终为空。尽管在p:dataTable 中指定了rowKey 属性

【问题讨论】:

    标签: jsf jsf-2 primefaces jsf-2.2


    【解决方案1】:

    由于您有两种形式,请将&lt;h:setPropertyActionListener &gt; 附在您的&lt;p:menuitem&gt;

    【讨论】:

      【解决方案2】:

      答案:p:confirmDialog 需要与p:dataTable 属于同一h:form 的一部分

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-10
        • 2015-02-14
        • 1970-01-01
        • 2020-10-22
        • 2014-03-09
        • 2013-12-19
        相关资源
        最近更新 更多