Jsf PrimeFaces-无法删除datatable中的行

Jsf PrimeFaces-无法删除datatable中的行,jsf,primefaces,datatable,Jsf,Primefaces,Datatable,我正在尝试使用primeface datatable执行基本的添加和删除db操作。“添加”工作正常,但无法使“删除”工作。单击delete按钮时,不会调用delete函数 <h:body> <h:form> <p:panel id="toppanel" closable="true" toggleable="true" > <f:facet name="Store

我正在尝试使用primeface datatable执行基本的添加和删除db操作。“添加”工作正常,但无法使“删除”工作。单击delete按钮时,不会调用delete函数

      <h:body>
        <h:form>
            <p:panel  id="toppanel" closable="true" toggleable="true"    >
                <f:facet name="Store">
                    <p:outputLabel value="Header" />
                </f:facet>
                <f:facet name="@Copyright" >
                    <p:outputLabel value="footer" />
                </f:facet>

                <p align="left" >

                    <p:inputText value="#{salesPerson.item.itemId}" id="itemid" >
                        <f:passThroughAttribute name="placeholder" value="ID"/>
                    </p:inputText>
                    <p:inputText value="#{salesPerson.item.itemTitle}"  >
                        <f:passThroughAttribute name="placeholder" value="TITLE"/>
                    </p:inputText>
                    <p:inputText value="#{salesPerson.item.itemDesc}"  >
                        <f:passThroughAttribute name="placeholder" value="DESCRIPTION"/>
                    </p:inputText>
                    <p:inputText value="#{salesPerson.item.price}"  >
                        <f:passThroughAttribute name="placeholder" value="PRICE"/>
                    </p:inputText>

                </p>
                <p align="right" >

                    <p:commandButton process="@form" id="Create" value="Create"  update="out" actionListener="#{salesPerson.addItem()}" />



                </p>

                <p:dataTable id="out" var="item"  value="#{salesPerson.items}"  rowKey="#{item.itemId}" selection="#{salesPerson.selectedItems}" >

                    <p:column selectionMode="multiple" width="1%"/>
                    <p:column>
                        <f:facet name="header">
                            <h:outputText value="ID" />
                        </f:facet >
                        <h:outputText value="#{item.itemId}" />
                    </p:column>
                    <p:column>
                        <f:facet name="header">
                            <h:outputText value="TITLE" />
                        </f:facet >

                        <h:outputText value="#{item.itemTitle}" />
                    </p:column>

                    <p:column>
                        <f:facet name="header">
                            <h:outputText value="DESCRIPTION" />
                        </f:facet >
                        <h:outputText value="#{item.itemDesc}" />
                    </p:column>
                    <p:column>
                        <f:facet name="header">
                            <h:outputText value="PRICE" />
                        </f:facet >
                        <h:outputText value="#{item.price}" />
                    </p:column>


                </p:dataTable>

              <p align="right" >

                  <p:commandButton process="@form" id="delete" value="Delete"  update="out" actionListener="#{salesPerson.deleteItem(items)}" />



                </p>
            </p:panel>
        </h:form>
    </h:body>
</html>
售货员豆 这是控制器支持bean

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.parthi.controller;

import javax.inject.Inject;
import com.parthi.model.Item;
import com.parthi.backing.ShoppingBean;
import com.parthi.service.StoreKeeper;
import java.io.Serializable;
import java.util.LinkedList;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;



@RequestScoped
@Named
public class SalesPerson implements Serializable{


    @Inject
    private Item item;

    private List<Item> items = new LinkedList<>();

    private List<Item> selectedItems = new LinkedList<>();
    @EJB
    private StoreKeeper storeKeeper;

    public Item getItem() {
        return item;
    }

    public void setItem(Item item) {
        this.item = item;
    }

    public List<Item> getSelectedItems() {
        System.out.println("Number of items getselected" +selectedItems.size());
        return selectedItems;
    }

    public void setSelectedItems(List<Item> selectedItems) {
         System.out.println("Number of items setselected" +selectedItems.size());
        this.selectedItems = selectedItems;
    }

    public void addItem(){

        storeKeeper.addItem(item);
       // System.out.println("Printing add item");


    }

    public List<Item> getAllItems() {
       // System.out.println("Getting all SalesPerson-items");
        items = storeKeeper.getAllItems();
        return items;
    }

    public void deleteItem(List<Item> items){
        System.out.println("Reached SalesPerson.deleteItem");
        int i =0;
        while(i <= items.size()){
        storeKeeper.deleteItem(items.get(i));

        i++;
        System.out.println("deleting..." + items.get(i));
        }
    }

    public List<Item> getItems() {
        getAllItems();
        return items;
    }

    public void setItems(List<Item> items) {
        this.items = items;
    }

}
服务EJB 服务是执行CRUD操作的无状态会话bean

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.parthi.service;

import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import com.parthi.model.Customer;
import com.parthi.model.Item;



@Stateless
public class StoreKeeper {

    @PersistenceContext
    private EntityManager em;

    public List<Item> getAllItems(){
         System.out.println("Getting all StoreKeeper-item");
        return em.createQuery("FROM Item p", Item.class).getResultList();
    }

    public void addItem(Item item){
        System.out.println("Printing all StoreKeeper add item");
        em.persist(item);
    }

     public void deleteItem(Item item){
                em.merge(item);
                em.remove(item);
    }



}

您是否调试了该方法是否已输入?我不确定您希望发生什么,但您知道,由于@RequestScoped bean,调用delete时salesPerson.items将为空?我正在尝试删除用户选择的项目。最初我通过了selectedItems。它不起作用。所以我试着通过所有的itemsitems。它仍然不起作用。根本没有调用deleteItem方法。从未调用actiolistener方法。它只是在单击命令按钮时更新数据表