【问题标题】:JSF implicit vs. explicit navigationJSF 隐式与显式导航
【发布时间】:2013-08-03 22:23:39
【问题描述】:

当我遇到this SO 问题/答案时,我正在考虑在我的网络应用程序中使用显式页面导航规则,摘录如下:

...由于新的“隐式导航”功能,导航规则自 JSF 2.0 以来已过时。

但是,我浏览了大部分CoreServlets JSF 2.0 tutorial,其中有一个专门用于显式页面导航的部分,并且对此进行了积极的讨论。要么这违背了上述建议,要么我误解了一些东西。

我不想以过时的方式创建新的网络应用程序。任何人都可以解释一下吗?

【问题讨论】:

    标签: jsf-2


    【解决方案1】:

    这有点主观,但唉,归结为以下几点:

    1. XML 中的导航规则是一个维护地狱。

    2. 使用导航规则表明有问题的 Web 应用程序存在“一个 URL 后面”问题,这会导致糟糕的用户体验(页面不可添加书签)。

    3. 使用导航规则表明有问题的 Web 应用程序正在使用 POST 进行页面到页面导航,这不仅会导致糟糕的用户体验(页面不可收藏),还会导致糟糕的 SEO(机器人不索引 POST,因此公共搜索引擎无法访问 POST 导航页面)。

    另见:

    【讨论】:

      【解决方案2】:

      从纯粹的技术角度来看,导航规则并没有过时,因为规范和任何 API 都没有将它们标记为过时、不推荐或需要修剪的候选者。

      事实上,它们在 JSF 2.2 中通过可重用模块的 Faces Flow 特性得到了一定程度的复兴。

      这在实践中说,当然当不使用 Faces Flow 功能时,我从未见过 XML 中的导航规则有太多用途。从理论上讲,它们会使维护变得更容易(IIRC 这是他们最初的设计目标之一),但实际上正如 BalusC 所提到的那样,它只会导致维护地狱。

      但正如 BalusC 也提到的,它是主观的。有些人实际上仍然喜欢主要定义托管 bean、注入(连接)、实体映射以及您在 XML 中而不是使用注释(并且仅使用 XML 作为可能的覆盖或全局事物)。

      在我看来,导航规则主要反映了 JSF 最初尝试对 HTTP 进行过多抽象,并呈现更高层次的类桌面编程模型。在该模型中,重定向到带有查询参数的 URL 并没有真正占有一席之地。一段时间以来(从 JSF 2.0 开始),JSF 已经进入了一个更加中间的模型,其中更接受普通的 GET 请求和 PRG(Post-Redirect-GET)。遵循这个新模型,您确实可以说导航规则没有地位,即实际上已经过时了。

      【讨论】:

        【解决方案3】:

        你可以使用任何一个。

        在xml代码中显式意味着:

        1. 更多开销,特别是在条件复杂的情况下(您必须将操作方法​​的结果与预期值相匹配)。

          1b) 如果有拼写错误,隐式导航可能会导致 404。显式会导致错误页面。

        2. 您可以使用工具在 GUI 中绘制规则,然后生成 faces-config.xml

        3. 稍后,更改规则意味着更改 XML(您无需重新编译)。如果您更改 URL/JSF 页面名称,则无需重新编译。

        我会说使用其中一个是偏好问题,我很高兴使用隐式导航。

        【讨论】:

        • 关于过时的评论有什么见解吗?该评论由 BalusC 发表,由于他在 SO 上的大量工作,我倾向于认真对待他的回答。
        • >You can use tools to draw the rules in a GUI 虽然乍一看这看起来很酷,并且可以让您深入了解应用程序的流程,但当您的应用程序超过几页时,这些图表往往会变得非常混乱。
        猜你喜欢
        • 1970-01-01
        • 2016-11-04
        • 1970-01-01
        • 2011-07-29
        • 2019-01-31
        • 1970-01-01
        • 1970-01-01
        • 2014-01-09
        • 1970-01-01
        相关资源
        最近更新 更多