2

是我有一个动态类型的网格,我的意思是我在网格中添加空行,首先想到在单元格编辑器中使用 primefaces,以便将值存储在 beans 列表中,工作但我遇到的问题是在日历上,当我选择一个并存储时,它存储在列表中,我检查它不执行 ajax 事件,你丢失了日期的值。

<p:commandButton value="Añadir dia" update="dataTable" actionListener="#{regDPNL.registrarNuevoDia}" />

<p:dataTable id="dataTable" var="dpnl" value="#{regDPNL.listdpnl}" paginatorPosition="top"
 rows="20" rowIndexVar="rowIndex" editable="true" editMode="cell"  

   <p:ajax event="cellEdit" listener="#{regDPNL.onCellEdit}" />                

   <p:column width="25%">  
      <f:facet name="header">  
         <h:outputText value="NOMBRE" />  
      </f:facet>
      <p:cellEditor>  
         <f:facet name="output"><p:inputText value="#{dpnl.nombre}" /></f:facet>  
         <f:facet name="input"><p:inputText value="#{dpnl.nombre}" /></f:facet>  
      </p:cellEditor>  
   </p:column>

   <p:column width="20%">  
      <f:facet name="header">  
         <h:outputText value="DESDE" />  
      </f:facet>
      <p:cellEditor> 
         <f:facet name="output"><p:inputText value="#{dpnl.fechaDesde}" /></f:facet>  
         <f:facet name="input"><p:calendar value="#{dpnl.fechaDesde}" pattern="dd/MM/yyyy" /></f:facet>  
      </p:cellEditor>  
   </p:column>

   <p:column width="20%">  
      <f:facet name="header">  
         <h:outputText value="HASTA" />  
      </f:facet>
      <p:cellEditor>  
         <f:facet name="output"><p:inputText value="#{dpnl.fechaHasta}" /></f:facet>  
         <f:facet name="input"><p:calendar value="#{dpnl.fechaHasta}" pattern="dd/MM/yyyy" /></f:facet>  
      </p:cellEditor> 
   </p:column>

   <p:column width="5%">  
      <f:facet name="header">  
         <h:outputText value="ELIMINAR" />  
      </f:facet>  
      <p:commandButton icon="ui-icon-editar" title="Delete Periodo" style="background:#fff">  
      </p:commandButton>
   </p:column> 
</p:dataTable>

Java代码:

private List<DetallePeriodoBean> listdpnl = new PeriodoNoLaborable();
private DetallePeriodoBean detallePeriodoNoLaborable = new ArrayList<DetallePeriodoBean>();

public void registrarNuevoDia() {                
   detallePeriodoNoLaborable = new DetallePeriodoBean();
   this.listdpnl.add(detallePeriodoNoLaborable);
}

public void onCellEdit(CellEditEvent event) {  
   Object oldValue = event.getOldValue();  
   Object newValue = event.getNewValue();    
   if(newValue != null && !newValue.equals(oldValue)) {  
      System.out.println("==> Old: " + oldValue + ", New:" + newValue);
   } 
}

http://s2.subirimagenes.com/imagen/previo/thump_8690487captura.png

4

3 回答 3

1

我遇到过这个问题。

解决方案非常简单(经过大量测试和错误)您必须在标签中添加 id 属性,例如:

<p:calendar id="date_selector" value="#{dpnl.fechaHasta}" pattern="dd/MM/yyyy" />
于 2017-01-19T09:37:19.840 回答
0

确保在 bean 中使用 java.util.date 作为日期字段(即 fechaDesde 等)。

于 2015-01-10T10:24:15.170 回答
0

在名为 output 的方面,使用标签 h:outputText 而不是 p:inputText

于 2014-01-18T02:23:13.797 回答