我正在使用primefaces及其数据表.几列是日期或货币.如果我试图过滤那些,那就有尴尬的行为.当我开始输入时,过滤器一直工作到第一个分隔符(例如日期点,所以它只过滤11个.下一个字符让表格显示没有条目).
是否可以应用日期转换器?
这是我现在的代码:
<p:column filterBy="#{cou.startDate}"
headerText="#{text['date']}"
filterMatchMode="contains"
sortBy="#{cou.startDate}" >
<h:outputText value="#{cou.startDate}" >
<f:convertDateTime pattern="dd.MM.yyyy" />
</h:outputText>
</p:column>
Run Code Online (Sandbox Code Playgroud)
据我所知,您不能使用转换器来获取过滤值。但是,您可以在 bean/service/dao 逻辑中处理该问题。
如果过滤器列与某些名称(如 startDate 或 endDate)匹配,您可以对逻辑进行硬编码并使用 SimpleDateFormat 来解析该值。更通用的方法是使用反射来获取与列关联的类,如果是日期,则使用 SimpleDateFormat,如果是数字,则使用 DecimalFormat,依此类推。
当然,如果您将该查询传播到数据库,您将无法使用 like 运算符。如果您使用数字,则需要比较是否相等(这同样适用于日期)。如果你正在寻找内存中的东西,你就必须稍微改变你的逻辑。但应该不会太糟糕。如果您可以发布一些支持 bean/服务代码,我想我可能会更有帮助;)