java - primefaces 时间表 : edit event details on move/resize event listeners

标签 java jsf-2 primefaces

我正在摆弄schedule demo code from the primefaces showcase (使用版本 3.3.1),我需要在移动/调整大小事件监听器上调整计划 itens 的一些值。 (我将使用“计划项目”来提及数据模型对象“计划的事件”,并为 API 触发的用户交互响应保留术语“事件”)。

因此,每当用户在界面上移动/调整计划项目的大小时,注册的事件监听器就会触发,显示当天增量、分钟增量消息,如展示示例所示。

但是我需要对项目做一些修改,即:

a) 确保计划的项目不会在周末(也是假期,但让我们忽略这一点)开始/结束。将项目的开头/结尾移至前一个工作日(如果在周末开始)或移至下一个工作日(如果在周末结束)

b) 使项目捕捉到最近的一刻钟。

c) 确保安排的项目不会在上午 700 点之前或下午 2100 点之后开始/结束。如果超出这些限制,则将开始/结束时间调整为这些限制。

并在用户界面上显示结果更改。但我无法在事件监听器方法期间编辑数据模型。

这是时间表标签:

                    <p:schedule value="#{scheduleController.eventModel}"
                        widgetVar="myschedule" view="agendaWeek" allDaySlot="false"
                        slotMinutes="15" firstHour="7" showWeekends="FALSE"
                        leftHeaderTemplate="prev,next" rightHeaderTemplate=""
                        minTime="7am" maxTime="21pm" timeFormat="dd/MM H:mm{ - dd/MM H:mm}"
                        axisFormat="HH" timeZone="#{rotulo.timeZone}">

                        <p:ajax event="dateSelect"
                            listener="#{scheduleController.onDateSelect}"
                            update="eventDetails" oncomplete="eventDialog.show()" />
                        <p:ajax event="eventSelect"
                            listener="#{scheduleController.onEventSelect}"
                            update="eventDetails" oncomplete="eventDialog.show()" />
                        <p:ajax event="eventMove"
                            listener="#{scheduleController.onEventMove}" update="messages" />
                        <p:ajax event="eventResize"
                            listener="#{scheduleController.onEventResize}" update="messages" />

                    </p:schedule>

以及托管 bean 方法...

    public void onEventMove(ScheduleEntryMoveEvent event) {  
        doBusinessLogic((DefaultScheduleEvent) event.getScheduleEvent());
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Event moved", "Day delta:" + event.getDayDelta() + ", Minute delta:" + event.getMinuteDelta());  

        addMessage(message);  
    }  

    public void onEventResize(ScheduleEntryResizeEvent event) {  
        doBusinessLogic((DefaultScheduleEvent) event.getScheduleEvent());
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Event resized", "Day delta:" + event.getDayDelta() + ", Minute delta:" + event.getMinuteDelta());  

        addMessage(message);  
}  

我将在这个 doBusinessLogic() 中调整时间值。如何才能对 DefaultScheduleEvent 所做的更改反射(reflect)在以下数据模型上时间表?

最佳答案

代码没问题,通过调试数据模型,业务逻辑确实正确更新了计划项。

问题出在 View 更新中。 p:ajax 调用的更新属性应该是整个表单,而不仅仅是 eventDetails 或消息。

因此,将 jsf 页面更改为:

 <p:schedule value="#{scheduleController.eventModel}"
                        widgetVar="myschedule" view="agendaWeek" allDaySlot="false"
                        slotMinutes="15" firstHour="7" showWeekends="FALSE"
                        leftHeaderTemplate="prev,next" rightHeaderTemplate=""
                        minTime="7am" maxTime="21pm" timeFormat="dd/MM H:mm{ - dd/MM H:mm}"
                        axisFormat="HH" timeZone="#{rotulo.timeZone}">

                        <p:ajax event="dateSelect"
                            listener="#{scheduleController.onDateSelect}"
                            update="MYFORM" oncomplete="eventDialog.show()" />
                        <p:ajax event="eventSelect"
                            listener="#{scheduleController.onEventSelect}"
                            update="MYFORM" oncomplete="eventDialog.show()" />
                        <p:ajax event="eventMove"
                            listener="#{scheduleController.onEventMove}" update="MYFORM" />
                        <p:ajax event="eventResize"
                            listener="#{scheduleController.onEventResize}" update="MYFORM" />

                    </p:schedule>

我能够在屏幕上看到事件的变化。

关于java - primefaces 时间表 : edit event details on move/resize event listeners,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13416824/

相关文章:

jsf - session 到期时自动在客户端执行操作

pdf - 如何从 PrimeFaces p :dataExporter, 自定义 PDF,例如页面大小

java - 如何使用 FORTIFY 的 fpr 文件通过 Maven 生成 pdf 报告

java - 如何删除 java.util.Set 中的最后一个元素?

java - 尝试使用 maven 将属性文件放在 jar 之外时程序未运行

jsf - 如何重新执行<c :choose> based on a change in the model

jsp - 如何使用 Facelets 的 ui :repeat tag in JSP?

validation - 仅当按下某个命令按钮时才根据需要验证输入

jsf - 在执行 JSF 托管 bean 操作时显示进度图像

java - 算法建议-在号码列表上搜索