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

PrimeFaces Calendar绑定LocalDate隐藏时间部分问题求助

解决PrimeFaces Calendar关联LocalDate时仅显示日期的问题

嘿,我碰到过类似的情况,给你捋捋怎么搞定这个问题!

你之前参考的示例是针对带时间的LocalDateTime/ZonedDateTime的,当你改成只显示日期的LocalDate并去掉时间pattern后,问题出在转换器不匹配和组件默认模式还在处理时间这两点上,下面是具体的解决方案:

1. 用对LocalDate专属转换器

不要沿用原来处理带时间类型的转换器,直接用JSF自带的LocalDateConverter(PrimeFaces完全兼容这个),它专门用来处理java.time.LocalDate类型,不会去解析时间部分。

2. 强制Calendar组件只处理日期

给p:calendar加上mode="date"属性,这样组件会切换到纯日期选择模式,完全忽略时间相关的逻辑,避免和你的配置冲突。

完整可运行代码示例

Bean部分

import java.time.LocalDate;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

@Named
@RequestScoped
public class DateBean {
    private LocalDate periodFrom;

    // Getter and Setter
    public LocalDate getPeriodFrom() {
        return periodFrom;
    }

    public void setPeriodFrom(LocalDate periodFrom) {
        this.periodFrom = periodFrom;
    }
}

XHTML部分

<p:calendar id="localDate" 
            mode="date"
            pattern="dd-MMM-yyyy" 
            value="#{dateBean.periodFrom}">
    <f:converter converterId="javax.faces.LocalDate" />
</p:calendar>

为什么之前会出问题?

原来的示例用的转换器是针对带时间的LocalDateTime/ZonedDateTime的,它默认会期望输入包含时间部分;当你把pattern改成纯日期后,转换器找不到时间信息就会抛出转换异常。而加上mode="date"后,组件只会生成和接收纯日期格式的输入,再配合LocalDateConverter,就能完美匹配LocalDate类型了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:30:05