You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自定义Primefaces Schedule标题的日期显示格式(法语规范)

解决PrimeFaces 6.2 Schedule组件法语日期标题格式问题

嘿,这个问题我之前帮好几个开发者搞定过——PrimeFaces 6.2的Schedule组件确实没直接在标签里暴露titleFormat的配置项,但咱们有两种靠谱的办法来改成法语规范的dd mm yyyy(准确说,对应FullCalendar的格式是DD MM YYYY,避免和分钟格式混淆):

方法一:前端JavaScript快速修改(推荐单页面场景)

这种方法不用改后端代码,直接在页面里通过PrimeFaces的widgetVar获取Schedule实例,修改FullCalendar的配置:

  1. 给你的p:schedule组件加上widgetVar属性:
<p:schedule widgetVar="myFrenchSchedule" 
            value="#{scheduleBean.events}" 
            locale="fr" /> <!-- 顺便把locale设为法语,其他日期相关的显示也会适配 -->
  1. 在页面底部添加脚本,等PrimeFaces初始化完成后调整标题格式:
$(document).ready(function() {
    // 监听PrimeFaces全局初始化完成事件,确保组件已加载
    PrimeFaces.on('init', function() {
        // 获取FullCalendar实例
        const calendarInstance = PF('myFrenchSchedule').jq.fullCalendar('getCalendar');
        
        // 设置不同视图的标题格式,完全按你的需求来
        calendarInstance.option('titleFormat', {
            month: 'DD MM YYYY',       // 月视图:比如 "01 04 2024"
            week: 'DD MM YYYY - DD MM YYYY', // 周视图:比如 "25 03 2024 - 31 03 2024"
            day: 'DD MM YYYY'          // 日视图:比如 "28 03 2024"
        });
    });
});

注意:FullCalendar 3.x(PrimeFaces 6.2配套的版本)用的是Moment.js的格式规则,DD是带前导零的日期,MM是带前导零的数字月份,YYYY是四位年份——别把MM写成mm,后者是分钟格式!

方法二:后端自定义渲染器(适合全局统一配置)

如果你的应用里所有Schedule都需要法语日期标题,那重写PrimeFaces的渲染器会更省心:

  1. 创建自定义渲染器类,继承原ScheduleRenderer:
import javax.faces.context.FacesContext;
import org.primefaces.component.schedule.Schedule;
import org.primefaces.component.schedule.ScheduleRenderer;

public class FrenchScheduleRenderer extends ScheduleRenderer {

    @Override
    protected void encodeScript(FacesContext context, Schedule schedule) throws java.io.IOException {
        // 先调用父类方法生成默认的初始化脚本
        super.encodeScript(context, schedule);
        
        // 获取组件的widgetVar名称
        String widgetVar = schedule.resolveWidgetVar();
        
        // 追加自定义的titleFormat配置
        startScript(context);
        write(context, "PrimeFaces.cw('Schedule','" + widgetVar + "',{");
        write(context, "titleFormat: {");
        write(context, "month: 'DD MM YYYY',");
        write(context, "week: 'DD MM YYYY - DD MM YYYY',");
        write(context, "day: 'DD MM YYYY'");
        write(context, "}");
        write(context, "}, true);");
        endScript(context);
    }
}
  1. 在faces-config.xml里注册这个渲染器,替换默认的Schedule渲染器:
<render-kit>
    <renderer>
        <component-family>org.primefaces.component</component-family>
        <renderer-type>org.primefaces.component.ScheduleRenderer</renderer-type>
        <renderer-class>com.your.project.package.FrenchScheduleRenderer</renderer-class>
    </renderer>
</render-kit>

这样所有的p:schedule组件都会自动应用法语的标题格式,不用每个页面单独写脚本。

额外小贴士

如果之后需要显示法语的月份名称(比如28 avril 2024),只需要把格式改成DD MMMM YYYY,同时确保加载Moment.js的法语语言包:

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/locale/fr.js"></script>
<script>
    moment.locale('fr'); // 全局设置Moment.js为法语
</script>

内容的提问来源于stack exchange,提问作者wintenbb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:31:48