无法通过p:dataTable中的p:contextMenu将对象传递给托管bean

时间:2015-12-08 09:17:22

标签: jsf primefaces managed-bean

我对Primefaces数据表和上下文菜单有疑问。

上下文菜单只包含一个选项,用于删除包含记录的行。

我如何理解,我需要传递给托管bean var参数(订单)?其中包含地图结构中的行数据。

<p:dataTable id="#{id}" var="order" rowIndexVar="rowId" value="#{ordersProvider}" emptyMessage="No more rows" rowKey="#{id}" selectionMode="single">
    <p:column headerText="№" filterBy="#{order.id}" filterMatchMode="contains">
        <div style="text-align: center;">
            <h:outputText value="#{order.id}"/>
        </div>
    </p:column>
    <p:column headerText="№ on site" filterBy="#{order.noticeNumber}" filterMatchMode="contains">
        <div style="text-align: center;">

                <h:outputText value="#{order.noticeNumber}" />
                <f:param name="searchString" value="#{order.noticeNumber}" />
        </div>
    </p:column>
    <p:column headerText="Company" filterBy="#{order.customerName}" filterMatchMode="contains">
        <div style="text-align: center;">
            <h:outputText value="#{order.customerName}"/>
        </div>
    </p:column>
    <p:column id="col">
        <f:facet name="header">
            <p:contextMenu for="#{id}">
                <p:menuitem value="Delete" update="#{id}" icon="ui-icon-close" action="#{clientOrdersBean.cancel(order)}"/>
            </p:contextMenu>
        </f:facet>
    </p:column>
</p:dataTable>

这是我的bean方法,用于删除数据。

    public void cancel(OrderBG order){

    order.setStatus(OrderStatus.Canceled);
    Environment.getInstance().getServiceProvider().getOrderBgService().save(order);
}

问题是,该值传递 - null。我不知道如何从桌子上获得整排。

有什么建议吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

getter和setter成功解决了问题。

在托管bean中:

private OrderBG newOrder = new OrderBG();

public OrderBG getNewOrder() {
    return newOrder;
}

public void setNewOrder(OrderBG newOrder) {
    this.newOrder = newOrder;
}

public void cancel(){

    getNewOrder().setStatus(OrderStatus.Canceled);
    Environment.getInstance().getServiceProvider().getOrderBgService().save(getNewOrder());
}

在xhtml UI中:

    <p:contextMenu for="#{id}">
    <p:menuitem value="Delete" update="#{id}" icon="ui-icon-close" actionListener="#{clientOrdersBean.cancel}"/>
</p:contextMenu>

<p:dataTable id="#{id}" var="order" value="#{ordersProvider}" emptyMessage="Заявки отсутствуют" rowKey="#{id}" selection="#{clientOrdersBean.newOrder}" selectionMode="single">