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
相关产品推荐
相关产品推荐

