是否可以在before-invokeApplication-phaselistener中获取对待执行的managedbean的引用?
在调用应用程序阶段之前,应该清楚要执行该方法的managedBean.
为了举例,假设有一个主要的管理bean来处理1个jsf页面.
所以我需要的基本上是:
为了实现第2点,我想要拦截其中一个阶段
我已经检查了关于在阶段实现中获取托管bean的API文档,但我似乎无法找到任何.
在输入这个问题后,我意识到我可以在@PostConstruct或托管bean的构造函数中执行此操作,但这只会在第一次构造bean时执行,并且我需要每次从访问jsf时调用该方法菜单.
有什么建议 ?
此致,
Albert Kam
您可以通过 ELContext/ELResolver 访问托管 bean。MyFaces wiki对此进行了很好的解释(也适用于普通 JSF)。
例如:
ELContext elContext = FacesContext.getCurrentInstance().getELContext();
NeededBean neededBean = (NeededBean) FacesContext.getCurrentInstance().getApplication()
.getELResolver().getValue(elContext, null, "neededBean");
Run Code Online (Sandbox Code Playgroud)
请参阅MyFaces wiki 条目以获取进一步的说明以及其他 JSF 版本的实现。
您使用@PostConstruct 的想法是一个很好的想法。考虑将范围更改为 @ViewScoped 之类的内容,以便每次导航到该视图时都会执行逻辑。
另外,请查看PreRenderViewEvent(针对 JSF 2)。此代码嵌入在您的 Facelet 页面中:
<f:metadata>
<f:viewParam name="foo" value="#{bean.foo}"/>
<f:event type="preRenderView" listener="#{bean.doSomething}"/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
f:event 监听器在每次页面视图之前执行。
归档时间: |
|
查看次数: |
12415 次 |
最近记录: |