【发布时间】:2010-09-28 02:12:04
【问题描述】:
关于标题的简单问题。
我的情况是我想听“在 RENDER_RESPONSE 之前”阶段,并改变一些组件的内部状态。
PhaseListener 是在 SEAM 应用程序中执行此操作的“正确方法”吗?
【问题讨论】:
关于标题的简单问题。
我的情况是我想听“在 RENDER_RESPONSE 之前”阶段,并改变一些组件的内部状态。
PhaseListener 是在 SEAM 应用程序中执行此操作的“正确方法”吗?
【问题讨论】:
如果你想改变 JSF 组件的内部状态,依赖 JSF 阶段监听器。下面显示了声明 JSF 阶段侦听器的 Seam 方式
@Name("applicationPhaseListener")
@Scope(ScopeType.APPLICATION)
public class ApplicationPhaseListener {
/**
* Called TRANSPARENTLY by Seam
*/
@Observer("org.jboss.seam.beforePhase")
public void beforePhase(PhaseEvent event) {
}
/**
* Called TRANSPARENTLY by Seam
*/
@Observer("org.jboss.seam.afterPhase")
public void afterPhase(PhaseEvent event) {
}
}
但是如果你想改变Seam contextual组件状态,使用
@Name("applicationPhaseListener")
public class ApplicationPhaseListener {
@Observer("applicationListener")
public void applicationListener() {
}
}
你可以
以编程方式调用您的事件
Events.instance().raiseEvent("applicationListener");
通过使用 @RaiseEvent 注释,该注释位于某些操作方法之上
@RaiseEvent("applicationListener")
public void doSomething() {
}
pages.xml
<page id="<PAGE_ID_GOES_HERE>">
<raise-event type="applicationListener"/>
</page>
【讨论】: