JSF 动作返回 null 和 "" 的区别

43

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

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

35

上述陈述是否正确(准确)?

是的。你可以选择返回 null 或者直接返回 void,两种方法都可以。


如果是正确的话,那么这会产生什么影响?具体来说,一个与另一个相比在页面数据(JSF UI组件中的值或存储在DataTable中的请求作用域bean中的数据)上有什么影响?

对于请求作用域bean没有影响。只有在使用JSF2视图作用域bean时才有影响。如果返回 null 或者 void,则该视图作用域bean实例将在下一次请求中保留,否则它将被重新创建。


在什么情况下应该使用其中之一?

如果希望在后续请求中保留JSF2视图作用域bean,则应返回空。

另请参阅:


那么,如果我在不使用视图作用域的情况下使用JSF 1.2,那么可以说实际上没有任何区别吗? - Brent C
1
从功能上来说,没有区别。但从技术上讲,有一些差异,你已经自己发现了。创建一个新视图的成本很小。只需在回传到相同视图的 postbacks 上始终返回 nullvoid 即可。 - BalusC
FYI:JSF2规范中的“应用程序操作”有以下限制:1.方法必须是公共的。2.方法不能带参数。3.方法必须返回Object。我记得至少有一个导航API实现会在尝试使用void返回类型时出错,但无法记住是哪个供应商/版本。 - McDowell
@McDowell:实际上,任何可以由MethodExpression表示的内容都是合法的操作方法,即使是在EL 2.2中可能需要参数的方法也是如此。那个规范引用可能是JSF 1.0的遗留物。 - BalusC
这种对响应值的处理差异是在规范中涵盖还是只是实现的事情? - Tibor Blenessy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接