使用不同的表单,所选行为null

时间:2013-12-09 23:17:57

标签: primefaces datatable

当我按showDialog命令按钮

时,我得到一个空的选定行

我看不出我的问题是什么

这是我的第一个表单:

<h:form id="firstForm">
    <p:commandButton action="#{testBB.showDialog}" id="showDialog"
        update=":secondForm" value="#{msg['show.dialog']}" />
</h:form>

这是我的第二种形式:

<h:form id="secondForm">
    <p:dataTable id="testDatatable"
        rendered="#{not empty testBB.list}" 
        rowKey="#{order.orderNumber}"
        selection="#{testBB.selectedRow}"
        selectionMode="single"
        sortBy="customerName" value="#{testBB.list}" var="order">
        <p:column headerText="#{msg['order.number']}">
            <h:outputText value="#{order.orderNumber}" />
        </p:column>
        <p:column headerText="#{msg['total.value']}">
            <h:outputText value="#{order.totalValue}" />
        </p:column>
    </p:dataTable>
</h:form>

我的支持bean:

@ManagedBean
@ViewScoped
public class TestBB implements Serializable {
    private List<Order> list;
    private Order selectedRow;

    public void showOrder() {
        try {
            System.out.println(selectedRow);
        } catch (Exception exception) {
        }
    }
}

我的DTO:

public class Order implements Serializable {
    private int orderNumber;
    private double totalValue;

    public void showOrder() {
        try {
            System.out.println(selectedRow);
        } catch (Exception exception) {
        }
    }

    /** Getters and setters */
}

我的代码有什么问题?

3 个答案:

答案 0 :(得分:2)

<p:ajax event="rowSelect" />
<p:ajax event="rowUnselect" />

在数据表中,选择/取消选择,只要点击发生就会发生。

如果您只需要在按钮上进行选择,请点击这样使用'process'

<p:commandButton process=":secondForm:testDatatable" update=":secondForm"/>

答案 1 :(得分:0)

您需要在rowSelection上更新模型。这可以使用<p:ajax event="rowSelect" />来完成。以下是我认为您的数据表应如下所示:

<p:dataTable id="testDatatable"
             rendered="#{not empty testBB.list}" 
             rowKey="#{order.orderNumber}"
             selection="#{testBB.selectedRow}"
             selectionMode="single"
             sortBy="customerName" value="#{testBB.list}" var="order">
    <p:ajax event="rowSelect" />
    <p:column headerText="#{msg['order.number']}">
        <h:outputText value="#{order.orderNumber}" />
    </p:column>
    <p:column headerText="#{msg['total.value']}">
        <h:outputText value="#{order.totalValue}" />
    </p:column>
</p:dataTable>

可以找到一个很好的例子here(Primefaces Demo)。

答案 2 :(得分:0)

正如Kerem Baydogan建议你必须在你的命令按钮中包含你的数据表id的process属性 如果您不包括process属性,那么组件树中将不会处理任何组件,并且不会更新任何模态值,因此您将选择为null。

如果您没有更改其状态,我觉得无需更新数据表。