【问题标题】:Can't pass object to managed bean via a p:contextMenu in a p:dataTable无法通过 p:dataTable 中的 p:contextMenu 将对象传递给托管 bean
【发布时间】:2016-03-13 03:28:04
【问题描述】:

我对 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。我不知道如何从表中获取整行。

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

【问题讨论】:

  • 查看 PrimeFaces 展示,了解如何更有效地在 dataTable 中使用 contextMenu……将其与“选择”结合使用。在标题中您谈到了“地图”,但您通过了“OrderBG”?
  • OrderBG - 是当前上下文中的地图(地图数据结构)。
  • 你甚至没有回应第一条评论中的大建议......

标签: jsf primefaces managed-bean


【解决方案1】:

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 界面中:

    <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">

【讨论】:

  • 所以您实际上将上下文菜单放在数据表之外,如 PrimeFaces 展示中所示...并使用了 PrimeFaces 展示中所做的选择...请说明您明确做了什么而不是只是代码
猜你喜欢
  • 2015-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-12
  • 1970-01-01
相关资源
最近更新 更多