如何为PrimeFaces Schedule设置日期范围?v6.2版本遇问题求助
解决PrimeFaces 6.2中p:schedule设置日期范围的问题
看起来你已经找对了方向,用extender属性来扩展FullCalendar的配置,但可能有几个细节没注意到,导致validRange没生效。我来帮你梳理下可能的问题和解决方案:
可能的问题点及修复方案
1. FullCalendar的validRange.end是排他性的
FullCalendar的validRange选项中,end日期是不包含在内的。如果你想让用户能访问到2018-05-26,需要把end设为'2018-05-27',否则26号会被排除在外。
2. Extender函数的写法可以简化
你当前用$.extend深拷贝的方式没问题,但直接赋值validRange属性会更直观,也避免深拷贝可能带来的潜在问题:
function scheduler() { this.cfg.validRange = { start: '2018-05-06', end: '2018-05-27' // 调整为排他日期 }; }
3. 脚本位置必须正确
确保你的<h:outputScript>放在<p:schedule>组件之后,或者放在<h:body>的末尾。如果脚本放在<h:head>里,当PrimeFaces初始化日程组件时,scheduler函数可能还没被定义,导致extender无法生效。正确的结构应该是:
<p:schedule extender="scheduler" value="#{scheduleView.eventModel}" view="#{scheduleView.view}" rightHeaderTemplate="agendaWeek, agendaDay"> <!-- 其他内容 --> </p:schedule> <h:outputScript> function scheduler() { this.cfg.validRange = { start: '2018-05-06', end: '2018-05-27' }; } </h:outputScript>
4. 用客户端API兜底(如果extender仍不生效)
如果上述方法都不行,可以尝试通过PrimeFaces的客户端Widget API来修改配置并重新初始化:
首先给p:schedule加上widgetVar属性:
<p:schedule widgetVar="mySchedule" extender="scheduler" value="#{scheduleView.eventModel}" view="#{scheduleView.view}" rightHeaderTemplate="agendaWeek, agendaDay"> <!-- 其他内容 --> </p:schedule>
然后用脚本修改配置:
<h:outputScript> $(document).ready(function() { var scheduleWidget = PF('mySchedule'); scheduleWidget.cfg.validRange = { start: '2018-05-06', end: '2018-05-27' }; scheduleWidget.init(); // 重新初始化组件 }); </h:outputScript>
5. 检查浏览器控制台
打开浏览器开发者工具(F12)的Console标签,看看有没有JavaScript错误,比如scheduler函数未定义、validRange属性不存在等,这些错误能快速帮你定位问题。
内容的提问来源于stack exchange,提问作者Arun P V
相关产品推荐
相关产品推荐

