2015-07-21 5 views
-1

, что я:PrimeFaces: р: cellEditor не стреляющие

Основной данных таблицы, которые для простоты, только показывает количество элементов определенного клиента порядка.

ПРОБЛЕМА:

Когда я нажимаю на ячейку, то <p:inputText> появляется, я могу ввести номер (например .: 3). Когда я нажимаю enter, старое число (например: 42) появляется в пределах <h:outputText>. Если я снова щелкнул ячейку, снова появится отредактированный номер (3). И самое главное, метод public void onCellEdit(CellEditEvent event) НЕ запускается.

ЧТО ИМЕЮТ Я ПРОБОВАЛИ:

Я создал еще один базовый веб-приложение, в котором есть только один редактируемые <p:dataTable> (как я хочу), и в этом проекте слушатель пожары, и я просто не получить то, что другое. Ради простоты этого вопроса я не буду добавлять код другого проекта.

Кроме того, я попытался применить (не) принятый ответ на вопрос this, но он тоже не работал.

ВОПРОС:

Почему слушатель не срабатывают? Что может быть причиной (или причинами)? Да, я новичок, поэтому любой намек был бы очень желанным.

Спасибо!

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> 

Это EditController

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; 
    } 
} 

ответ

0

Комментарий к раствору или обходной путь:

В PrimeFaces showcase предлагается использовать <p:ajax event="cellEdit" listener="#{dtEditView.onCellEdit}" update=":form:msgs" />, но по неизвестным мне причинам событие не запускается и метод 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> 

Bean-метод:

public void onCellEdit(Item item) { 

    //stuff 
} 
+1

Пожалуйста, добавьте текст, что вы изменили и почему, что решить ее. Поэтому другие могут легче распознать вещи для себя – Kukeltje

Смежные вопросы