我们刚开始将旧的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
感谢任何提示。
答案 0 :(得分:2)
据我所知,您使用的默认面转换器无法接受/忽略传递给它的无效值并忽略它们。
要使其工作,您需要创建自己的自定义转换器,在那里执行转换为正确的类型,如果转换成功,则返回转换值,如果失败,则返回一些默认值。
这是您通常对更复杂的参数/转换器组合所做的事情,其中只有id的存在才能读取full complex object from somewhere
这整个概念也用在OmniFaces @Param
注释中,这可能是一个有趣的解决方案。如果转换失败,它们将字段设置为null。也请参见该页面上的演示。