<f:viewparam>:静默忽略错误的参数

时间:2017-06-07 18:11:39

标签: jsf

我们刚开始将旧的jsf 1项目迁移到具有新要求的jsf 2.3版。目前我正在使用viewparams的页面上工作。什么是静默忽略错误参数类型的正确方法?

例如,页面 searchResults.xhtml

的定义
<f:metadata>
   <f:viewParam name="lastPrice" 
             value="#{ReportAgentBean.lastPrice}" converter="javax.faces.Double"/>

   <f:viewParam name="currentPrice" 
             value="#{ReportAgentBean.currentPrice}" converter="javax.faces.Double"/>

   <f:viewParam name="listPrice" 
             value="#{ReportAgentBean.listPrice}" converter="javax.faces.Double"/>
</f:metadata>

忽略无效参数的最佳方法是什么?如果某人触发了以下请求,则将其处理为null:

http://www.ourapp.com/reports/searchResults?lastPrice=undefined?currentPrice=INVALIDSTRING

理想情况下会导致:

http://www.ourapp.com/reports/searchResults

感谢任何提示。

1 个答案:

答案 0 :(得分:2)

据我所知,您使用的默认面转换器无法接受/忽略传递给它的无效值并忽略它们。

要使其工作,您需要创建自己的自定义转换器,在那里执行转换为正确的类型,如果转换成功,则返回转换值,如果失败,则返回一些默认值。

这是您通常对更复杂的参数/转换器组合所做的事情,其中​​只有id的存在才能读取full complex object from somewhere

这整个概念也用在OmniFaces @Param注释中,这可能是一个有趣的解决方案。如果转换失败,它们将字段设置为null。也请参见该页面上的演示。