p:schedule错误地显示计划中具有相同开始日期和结束日期时间的事件

时间:2016-02-18 12:47:05

标签: primefaces fullcalendar

我在计划中创建了两个事件(PrimeFaces Schedule Demo)http://www.primefaces.org/showcase/ui/data/schedule.xhtml

对于事件“1”,使用参数

创建
From: 08/02/2016 06:00 To: 08/02/2016 06:00 

事件“2”

From: 09/02/2016 06:00 To: 09/02/2016 07:00.  

PrimeFaces Schedule

为什么在计划事件中“1”显示超过“2”?我怎么解决它?

感谢

2 个答案:

答案 0 :(得分:2)

我假设你没有做一些调试和实验。首先,会发生0持续时间的事件,而不是“不到1小时”(更正了您的标题)在回复中,您会看到,当您创建 时0(零) 持续时间事件,正确报告开始日期时间和结束日期时间。

<?xml version='1.0' encoding='UTF-8'?>
<partial-response id="j_id1">
  <changes>
    <update id="j_idt88:schedule"><![CDATA[{"events" : [
      {"id": "3fbce3ee-7747-4cef-8362-c8d08d004c6e","title": "Champions League Match","start": "2016-02-17T21:00:00+0200","end": "2016-02-18T00:00:00+0200","allDay":false,"editable":true},
      {"id": "df70f7f0-6806-49a8-8991-9b109c397757","title": "Birthday Party","start": "2016-02-18T14:00:00+0200","end": "2016-02-18T19:00:00+0200","allDay":false,"editable":true},
      {"id": "7415213a-d721-4ffd-a60a-d82e88528c78","title": "Breakfast at Tiffanys","start": "2016-02-19T10:00:00+0200","end": "2016-02-19T12:00:00+0200","allDay":false,"editable":true},
      {"id": "81c0149b-0850-4b90-a345-4e89a764a2a5","title": "Plant the new garden stuff","start": "2016-02-20T16:00:00+0200","end": "2016-02-22T16:00:00+0200","allDay":false,"editable":true},
      {"id": "8087111d-c559-4add-a498-2f3f58a02f0d","title": "MyNewEvent","start": "2016-02-16T12:30:00+0200","end": "2016-02-16T12:30:00+0200","allDay":false,"editable":true}]}]]>
    </update>
    <update id="j_id1:javax.faces.ViewState:0">
      <![CDATA[5869453577302409685:-7766841559488939365]]>
    </update></changes>
</partial-response>

因此,客户端显示此0持续时间事件为2小时事件。很容易发现这个“客户端”实际上是jquery-fullCalendar并且通过一些小搜索,你可以发现它有默认值,其中包括:

defaultTimedEventDuration:"02:00:00"

documentation about this很清楚。因此,显示0持续时间事件是“无意义”,它假定没有结束日期并且默认启动(我没有调试到PrimeFaces使用的fullCalendar.js文件中),因此它是 明显 转换为两小时的活动。所以这就是答案为什么

“如何解决” 的答案无法 得到全面解答,因为您无处陈述您的预期行为。

最简单的解决方案

  • 阻止用户添加此类事件。
  • 在填充模型时设置默认值为您所需的值(提交时间或渲染时间)。

另一个选项更复杂,我没试过

但是现在很清楚,FullCalendar的默认设置最有可能发挥作用,它们需要被覆盖。好吧,在5.3 PrimeFaces文档中,第402页提到了一些名为extender的属性,其定义如下

  

扩展底层fullcalendar插件选项的javascript函数名称。

因此将extender="scheduleExt()添加到日程表

创建一个相应的javascript函数并正确填充它(这是一个例子,我没有测试它,试试)

function scheduleExt() {
   //this = schedule widget instance
   //this.cfg = options
   this.cfg.defaultTimedEventDuration:"02:00:00"
   };
}

答案 1 :(得分:0)

如果@Kukeltje解决方案不起作用,那么在primefaces.jar中进行更改

primefaces /src/main/resources/META-INF/resources/primefaces/schedule/schedule.js

找到defaultTimedEventDuration:"02:00:00",然后根据您的要求修改默认的时间持续时间。这对我来说非常合适。

注意: @Kukeltje解决方案对我不起作用所以我在Primefaces 6.0 jar上实现了这个

相关问题