【问题标题】:Difference between returning null and "" from a JSF action从 JSF 操作返回 null 和 "" 之间的区别
【发布时间】:2012-02-03 09:00:34
【问题描述】:

据我了解,当 JSF 操作返回 ""(空字符串)时,用户会停留在当前页面上,但视图会刷新。但是,当操作返回 null 时,用户仍停留在当前页面上,但旧视图被重用。我的问题是:

  1. 上述说法是否正确(准确)?
  2. 如果是,那么这意味着什么?具体来说,使用其中一种与另一种对页面上的数据(例如 JSF UI 组件中的值,或存储在 DataTable 中的请求范围 bean 中的数据)有什么影响?
  3. 在什么情况下应该使用一种而不是另一种?

【问题讨论】:

    标签: java jsf navigation


    【解决方案1】:

    上述说法是否正确(准确)?

    是的。除了返回null,您也可以只返回void


    如果是,那么这意味着什么?具体来说,使用一个与另一个对页面上的数据有什么影响(例如 JSF UI 组件中的值,或存储在 DataTable 中的请求范围 bean 中的数据)?

    没有请求范围的 bean。它只对 JSF2 视图范围的 bean 有影响。返回 nullvoid 时,视图范围的 bean 实例将保留在下一个请求中,否则将重新创建。


    在什么情况下应该使用一种而不是另一种?

    如果您想在后续请求中保留 JSF2 视图范围的 bean。

    另见:

    【讨论】:

    • 所以如果我使用没有视图范围的 JSF 1.2,那么可以肯定地说真的没有区别吗?
    • 功能上,没有。但从技术上讲,您已经发现了一个差异。创建新视图的成本很小。在回发时始终将nullvoid 返回到相同的视图。
    • 仅供参考:应用程序操作在 JSF2 规范中具有以下约束:1.该方法必须是公开的。 2. 方法不能带参数。 3. 该方法必须返回 Object。 我记得如果您尝试使用 void 返回类型,但不记得哪个供应商/版本,至少有一个导航 API 实现崩溃了。
    • @McDowell:实际上,任何可以用MethodExpression 表示的东西都是合法的行动方法,即使是在EL 2.2 中尽可能采用参数的方法。该规范引用可能是 JSF 1.0 的遗留物。
    • 这种区别对待响应值是否包含在规范中,或者它只是实现的东西?
    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 2013-01-12
    • 2012-11-07
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 2012-09-03
    • 2017-07-18
    相关资源
    最近更新 更多