PrimeFaces上的对话框不会更新和计算对话框页面中的日期差异。
对话页面:
<p:dialog id="GrupoCreateDlg" widgetVar="GrupoCreateDialog" modal="true" resizable="false" appendTo="@(body)" header="#{bundle.CreateGrupoTitle}">
<h:form id="GrupoCreateForm">
<h:panelGroup id="display">
<p:panelGrid columns="2" rendered="#{grupoController.selected != null}">
<p:outputLabel value="#{bundle.CreateGrupoLabel_grupo}" for="grupo" />
<p:inputText id="grupo" value="#{grupoController.selected.grupo}" title="#{bundle.CreateGrupoTitle_grupo}" required="true" requiredMessage="#{bundle.CreateGrupoRequiredMessage_grupo}"/>
<p:outputLabel value="#{bundle.CreateGrupoLabel_usuario}" for="usuario" />
<p:inputText id="usuario" value="#{grupoController.selected.usuario}" title="#{bundle.CreateGrupoTitle_usuario}" required="true" requiredMessage="#{bundle.CreateGrupoRequiredMessage_usuario}"/>
<p:outputLabel value="#{bundle.CreateGrupoLabel_clave}" for="clave" />
<p:inputText id="clave" value="#{grupoController.selected.clave}" title="#{bundle.CreateGrupoTitle_clave}" required="true" requiredMessage="#{bundle.CreateGrupoRequiredMessage_clave}"/>
<p:outputLabel value="#{bundle.CreateGrupoLabel_detalle}" for="detalle" />
<p:inputText id="detalle" value="#{grupoController.selected.detalle}" title="#{bundle.CreateGrupoTitle_detalle}" />
<p:outputLabel value="#{bundle.CreateGrupoLabel_fechainicio}" for="fechainicio" />
<p:calendar id="fechainicio" pattern="dd/MM/yyyy" value="#{grupoController.selected.fechainicio}" title="#{bundle.EditGrupoTitle_fechainicio}"
locale="es" showOn="button" showButtonPanel="true"/>
<p:outputLabel value="#{bundle.CreateGrupoLabel_fechafin}" for="fechafin" />
<p:calendar id="fechafin" pattern="dd/MM/yyyy" value="#{grupoController.selected.fechafin}" title="#{bundle.EditGrupoTitle_fechafin}"
locale="es" showOn="button" showButtonPanel="true">
<p:ajax event="change" update="dias"/>
</p:calendar>
<p:outputLabel value="Dias"/>
<h:outputText id="dias" value="#{grupoController.calcularFechas()}">
<f:convertNumber type="number"/>
</h:outputText>
<p:outputLabel value="#{bundle.CreateGrupoLabel_incidencia}" for="incidencia" />
<p:selectBooleanCheckbox id="incidencia" value="#{grupoController.selected.incidencia}" />
<p:outputLabel value="#{bundle.CreateGrupoLabel_fechaincidencia}" for="fechaincidencia" />
<p:calendar id="fechaincidencia" pattern="dd/MM/yyyy" value="#{grupoController.selected.fechaincidencia}" title="#{bundle.EditGrupoTitle_fechaincidencia}"
locale="es" showOn="button" showButtonPanel="true"/>
<p:outputLabel value="#{bundle.CreateGrupoLabel_fechaavisocaducidad}" for="fechaavisocaducidad" />
<p:calendar id="fechaavisocaducidad" pattern="dd/MM/yyyy HH:mm:ss" value="#{grupoController.selected.fechaavisocaducidad}" title="#{bundle.EditGrupoTitle_fechaavisocaducidad}"
locale="es" showOn="button" showButtonPanel="true"/>
</p:panelGrid>
<p:commandButton actionListener="#{grupoController.create}" value="#{bundle.Save}" update="display,:GrupoListForm:datalist,:growl" oncomplete="handleSubmit(args,'GrupoCreateDialog');"/>
<p:commandButton value="#{bundle.Cancel}" onclick="GrupoCreateDialog.hide()"/>
</h:panelGroup>
</h:form>
</p:dialog>
Groupo控制器:
public int calcularFechas() throws ParseException {
diasDuracion = 0;
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date fechaFinal = selected.getFechainicio();
Date fechaInicial = selected.getFechainicio();
diasDuracion = (int) ((fechaFinal.getTime() - fechaInicial.getTime()) / 86400000);
System.out.println("Hay " + diasDuracion + " dias de diferencia");
} catch (NullPointerException e) {
e.printStackTrace();
}
return diasDuracion;
}
HTML必须显示outputText中日期初始和结束(天)之间的差异。 怎么了? 必须在不关闭对话框页面的情况下更新outputText dias 。
答案 0 :(得分:0)
我将你的东西复制并粘贴到我的项目中并按照这样编辑:
将calcularFechas()放入
<p:ajax event="change" update="dias" listener="#{grupoController.calcularFechas()"/>
并编写方法
getCalcularFechas(){ ...
}
它对我有用,因为在事件被触发后调用了侦听器。