2011-11-24 102 views
0

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

大声思考:也许在xhtml代中有一个阶段,当我可以调用backing bean上的方法,并且在渲染其他东西之前设置我的值?

+0

在未来的问题中,如果您使用的是JSF 2.0,请提及并标记这一点。与JSF 1.x的区别非常大,答案不可交换,或者对JSF 2.x来说更好/更好。 – BalusC

回答

0

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

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

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

这使得但是很少感,我不禁具有您正在寻找在错误的方向上的解决方案的印象。

+0

再次感谢BalusC。是的,我正在使用jsf 2,下次我将确保正确标记。您提供的解决方案非常优雅!我想这也适用于其他领域,比如验证。唯一的问题是我仍然看不到调用的方法。我的f:事件标签位于表单内,并且该方法位于bean中。我错过了什么? – Herzog

+0

它适用于我(Mojarra 2.1.4,但应该在旧版本上同样好)。它可以作为每个“UIComponent”和“”的子项。它在视图呈现之前被调用(不管表单是否被提交)。至于验证,这应该由验证者完成。他们应该在验证阶段运行。您的功能需求仍不清楚,所以我无法提出正确的方法。您至少可以从本文中获得一些有用的想法:[JSF 2.0中的通信](http://balusc.blogspot.com/2011/09/communication-in-jsf-20.html)。 – BalusC

+0

感谢您的伟大文章,BalusC。我对JSF 2的优雅印象非常深刻。至于我的功能需求,我还在研究[link](http://stackoverflow.com/questions/8201634/fajax-inside-uirepeat)我可以得到纠正出价视图打开,但当用户单击重复中的另一行时,或者导航到其他页面并返回时,我无法关闭它。将bidViews映射设置为null,或者在auctionBidViews.showBidView(parcel)中放置不同的宗地无济于事。这就是为什么我要在生命周期中寻找一个可以将bidViews地图设置为空的点,然后重新开始。 – Herzog