PrimeFaces上的对话框不会更新和计算日期差异

时间:2017-12-08 10:38:09

标签: ajax date primefaces

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

1 个答案:

答案 0 :(得分:0)

我将你的东西复制并粘贴到我的项目中并按照这样编辑:

将calcularFechas()放入

<p:ajax event="change" update="dias" listener="#{grupoController.calcularFechas()"/>

并编写方法

getCalcularFechas(){ ... }

它对我有用,因为在事件被触发后调用了侦听器。