【问题标题】:Overriding JSF lifecycle methods覆盖 JSF 生命周期方法
【发布时间】:2011-11-24 15:33:52
【问题描述】:

每当调用 JSF 页面时,我都需要设置一些值。所以我查看了生命周期方法,认为我将能够覆盖,例如,restoreView 方法,以便我可以将页面的某些属性设置为 null。但我似乎找不到任何人这样做的例子。如果您可以向我指出一个教程或示例,或者让我知道这样做的正确方法是什么——我将不胜感激。谢谢!

大声思考:也许在 xhtml 生成中有一个阶段,我可以在支持 bean 上调用一个方法,并在呈现其他任何内容之前设置我的值?

【问题讨论】:

  • 在以后的问题中,如果您使用的是 JSF 2.0,请提及并标记它。与 JSF 1.x 的区别非常大,对于 JSF 2.x,答案不能交换或做得更干净/更好。

标签: jsf jsf-2


【解决方案1】:

根据您的问题历史,您使用的是 JSF 2.0。所以,应该这样做:

<f:event type="preRenderView" listener="#{bean.preRenderView}" />

public void preRenderView() {
    this.some = null;
    // ...
}

然而,这没有什么意义,我不禁觉得你在寻找错误的方向的解决方案。

【讨论】:

  • 再次感谢 BalusC。是的,我使用的是 jsf 2,下次我会确保正确标记。您提供的解决方案非常优雅!我想它也适用于其他领域,例如验证。唯一的事情是我仍然没有看到该方法被调用。我的 f:event 标签在表单中,方法在 bean 中。我错过了什么?
  • 它适用于我(Mojarra 2.1.4,但在旧版本上应该同样适用)。它可以作为每个UIComponent&lt;f:metadata&gt; 的子元素。它在视图呈现之前被调用(无论是否提交表单)。至于验证,应该由验证器完成。它们应该在验证阶段运行。您的功能要求仍不清楚,因此我无法提出正确的方法。你至少可以从这篇文章中得到一些有用的想法:Communication in JSF 2.0
  • 感谢 BalusC 的精彩文章。 JSF 2 的优雅给我留下了深刻的印象。至于我的功能需求,我仍在处理link 我可以打开正确的 Bid 视图,但是当用户单击时我无法关闭它重复中的另一行,或导航到不同的页面并返回。将bidViews 映射设置为null,或将不同的包裹放入auctionBidViews.showBidView(parcel) 没有帮助。这就是为什么我要在生命周期中寻找可以将 bidViews 映射设置为 null 并重新开始的点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 2011-07-07
  • 1970-01-01
  • 1970-01-01
  • 2018-04-30
  • 2013-04-15
  • 1970-01-01
相关资源
最近更新 更多