Primefaces中的编辑日历3.5单元格值丢失了吗?

时间:2013-11-09 20:19:05

标签: jsf jsf-2 primefaces

是我有一个动态类型的网格,我的意思是我在网格中添加空行,首先想到在Cell Editor中使用primefaces,以便将值存储在bean列表中 列表,工作,但我有的问题是在日历上,当我选择一个并存储,它存储在列表中,我检查它不执行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

3 个答案:

答案 0 :(得分:1)

我遇到过这个问题。

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

<p:calendar id="date_selector" value="#{dpnl.fechaHasta}" pattern="dd/MM/yyyy" />

答案 1 :(得分:0)

在名为output的facet处使用标记h:outputText而不是p:inputText

答案 2 :(得分:0)

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