【问题标题】:<f:viewParam>: Ignore wrong parameters silently<f:viewParam>:静默忽略错误参数
【发布时间】:2017-06-07 18:11:38
【问题描述】:

我们刚刚开始将旧的 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

感谢任何提示。

【问题讨论】:

  • 可能有更好的方法,但为什么不将它们作为字符串传递并检查 setter 方法是否是真正正确的类型?
  • 我们有很多输入的巨大表格。我们有要求,用户可以通过电子邮件发送包含其特定 url 参数的链接。在过去,我与请求参数进行了斗争。那么 不是新的救援方法吗?这样我就不需要从请求参数重新创建 bean-properties。
  • 我从未说过要从请求参数重新创建它们。我只是说将它们作为字符串传递(不使用转换器)并在您调用的设置器中,如果有效则转换为某种类型并将值传递给真实字段。在其他情况下,设置为 null 或其他。
  • 或者也许您可以为每种类型创建自己的转换器,也可以执行我上面所说的操作,但是在转换器中,所以lastPrice=undefined 不会抛出错误并将真正的 lastPrice 字段保留为 'null ' 或 0 或...但仍然可能有更好的解决方案,我只是用我所拥有的知识分享我的想法(还有很多缺失;-))
  • 阅读 stackoverflow.com/questions/10061422/… 我会选择自定义转换器...

标签: jsf


【解决方案1】:

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

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

对于更复杂的参数/转换器组合,您通常会这样做,其中只有 id 的存在会读取 full complex object from somewhere

OmniFaces @Param 注释中也使用了整个概念,这可能是一个有趣的解决方案。如果转换失败,他们会将字段设置为 null。也可以查看该页面上的演示。

【讨论】:

    猜你喜欢
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多