Java PrimeFaces:p:cellEditor未启动

Java PrimeFaces:p:cellEditor未启动,java,jsf,primefaces,Java,Jsf,Primefaces,我所拥有的: 一种基本数据表,为了简单起见,它只显示某个客户订单的项目数量 问题: 单击单元格时,会出现,我可以输入一个数字(例如:3)。当我按enter键时,原来的号码(例如:42)出现在中。如果我再次单击该单元格,则会再次显示已编辑的数字(3)。最重要的是,public void onCellEdit(CellEditEvent)方法没有被激发 我试过什么: 我已经创建了另一个基本的web应用程序,其中只有一个可编辑的(如我所愿),在这个项目中,侦听器启动,我根本不知道有什么不同。为了简化这

我所拥有的:

一种基本数据表,为了简单起见,它只显示某个客户订单的项目数量

问题:

单击单元格时,会出现
,我可以输入一个数字(例如:3)。当我按enter键时,原来的号码(例如:42)出现在
中。如果我再次单击该单元格,则会再次显示已编辑的数字(3)。最重要的是,
public void onCellEdit(CellEditEvent)
方法没有被激发

我试过什么:

我已经创建了另一个基本的web应用程序,其中只有一个可编辑的
(如我所愿),在这个项目中,侦听器启动,我根本不知道有什么不同。为了简化这个问题,我将不添加其他项目的代码

此外,我还尝试将(未)被接受的答案应用于问题,但也不起作用

问题:

为什么听众不开火?原因可能是什么?是的,我是初学者,所以任何提示都是非常受欢迎的

谢谢大家!

xhtml与表格

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
            xmlns:ui="http://java.sun.com/jsf/facelets"
            xmlns:h="http://java.sun.com/jsf/html"
            xmlns:p="http://primefaces.org/ui"
            xmlns:f="http://java.sun.com/jsf/core"
            template="/templates/template.xhtml">

<ui:define name="metadata"/>
<ui:define name="content">

    <h:form id="lastOrders">

        <p:dataTable id="orders" 
                     var="item"
                     value="#{editController.items}"
                     emptyMessage="Der Kunde hat noch keine Aufträge!" 
                     style="size: 30px"
                     editable="true" 
                     editMode="cell">

            <p:ajax event="cellEdit" listener="#{editController.onCellEdit}" update=":mainForm:lastOrders:orders"/>

            <f:facet name="header"> 
                <p:outputPanel>
                    <h:outputText value="#{userController.customer.name}" />
                </p:outputPanel>
                <p:outputPanel>
                    <h:outputText value="#{oldOrdersController.order.date}">
                        <f:convertDateTime pattern="dd.MM.yy" />
                    </h:outputText>
                </p:outputPanel>
            </f:facet>

            <p:column  headerText="Amount">
                <p:cellEditor>
                    <f:facet name="output">
                        <h:outputText value="#{item.amount}"/>
                    </f:facet>
                    <f:facet name="input">
                        <p:inputText id="modelInput" value="#{item.amount}"/>
                    </f:facet>
                </p:cellEditor>
            </p:column>
        </p:dataTable>
    </h:form>
</ui:define>

这是编辑控制器

package com.forall.laundry.controller.edit;

import com.forall.laundry.controller.OldOrdersController;
import com.forall.laundry.model.Item;
import com.forall.laundry.service.ItemService;
import com.forall.laundry.service.ProductService;
import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.event.CellEditEvent;

    @Named
    @ViewScoped
    public class EditController implements Serializable{

    @EJB
    private ItemService itemService;

    @EJB
    private ProductService productService;

    @Inject
    private OldOrdersController oc;

    private List<Item> items;

    @PostConstruct
    public void init(){
        items = itemService.getItemsFrom(oc.getOrder());
    }

    public void onCellEdit(CellEditEvent event) {
        System.out.println("TEST"); // NOT FIRED (i know sysout is not good but no matter what I do here, nothing happens.
    }

    public ItemService getItemService() {
        return itemService;
    }

    public void setItemService(ItemService itemService) {
        this.itemService = itemService;
    }

    public OldOrdersController getOc() {
        return oc;
    }

    public void setOc(OldOrdersController oc) {
        this.oc = oc;
    }

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

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

    public ProductService getProductService() {
        return productService;
    }

    public void setProductService(ProductService productService) {
        this.productService = productService;
    }
}
package com.forall.洗衣房.controller.edit;
导入com.forall.alloyment.controller.OldOrdersController;
导入com.forall.alloyment.model.Item;
导入com.forall.alloyment.service.ItemService;
导入com.forall.alloyment.service.ProductService;
导入java.io.Serializable;
导入java.util.List;
导入javax.annotation.PostConstruct;
导入javax.ejb.ejb;
导入javax.faces.view.ViewScoped;
导入javax.inject.inject;
导入javax.inject.Named;
导入org.primefaces.event.CellEditEvent;
@命名
@视域
公共类EditController实现可序列化{
@EJB
私人项目服务项目服务;
@EJB
私人产品服务;
@注入
私有OldOrdersController oc;
私人清单项目;
@施工后
公共void init(){
items=itemService.getItemsFrom(oc.getOrder());
}
public void onCellEdit(CellEditEvent事件){
System.out.println(“TEST”);//未被激发(我知道sysout不好,但无论我在这里做什么,都不会发生任何事情。
}
public ItemService getItemService(){
退货服务;
}
公共void setItemService(ItemService ItemService){
this.itemService=itemService;
}
public OldOrdersController getOc(){
返回oc;
}
public void setOc(OldOrdersController oc){
this.oc=oc;
}
公共列表getItems(){
退货项目;
}
公共无效集合项(列表项){
这个项目=项目;
}
公共产品服务getProductService(){
退货服务;
}
公共无效集合ProductService(ProductService ProductService){
this.productService=productService;
}
}

对解决方案或解决方案的注释:

在PrimeFaces中,建议使用
,但由于我不知道的原因,事件没有被触发,onCellEdit方法也没有被调用。因此,我研究了触发事件的其他方法,并得出了下面的解决方案,在该解决方案中,我传递了已更改的对象本身,而不是事件。 我仍然不知道为什么原始代码不起作用

片段:

<p:column headerText="Produkt">
                <p:cellEditor>
                    <f:facet name="output">
                        <h:outputText value="#{item.name}"/>
                    </f:facet>
                    <f:facet name="input">
                        <h:inputText id="modelInput" value="#{item.name}">
                            <f:ajax execute="modelInput" event="change" listener="#{editController.onCellEdit(item)}" render=":mainForm:lastOrders:orders"/>
                        </h:inputText>
                    </f:facet>
                </p:cellEditor>
            </p:column>

请添加一些文字说明您更改了什么以及更改的原因。这样其他人就可以更容易地识别自己的内容
 public void onCellEdit(Item item) {

    //stuff
}