gpt4 book ai didi

JSF 2 相当于 IBM 的 hx :scriptCollector pre- and postRender

转载 作者:行者123 更新时间:2023-12-01 23:49:01 26 4
gpt4 key购买 nike

我正在将旧的 JSF 应用程序从 WebSphere 迁移到 JBoss:旧版本使用 JSF 的 IBM 实现。我的问题涉及以下组成部分:

<hx:scriptCollector id="aScriptCollector"
preRender="#{aBean.onPageLoadBegin}" postRender="#{aBean.onPageLoadEnd}">

为了重现 JSF 2 中的 preRender 行为,我使用了表单的绑定(bind) (s. here )。我的问题:

1) 您知道在 JSF 2 中模拟 postRender 的技巧吗?

2)你认为这是我用于“干净”预渲染的技巧吗?

非常感谢您的帮助!再见

最佳答案

实现完全相同相同钩子(Hook)的最接近的是

<f:view beforePhase="#{bean.beforePhase}" afterPhase="#{bean.afterPhase}">

public void beforePhase(PhaseEvent event) {
if (event.getPhaseId == PhaseId. RENDER_RESPONSE) {
// ...
}
}

public void afterPhase(PhaseEvent event) {
if (event.getPhaseId == PhaseId. RENDER_RESPONSE) {
// ...
}
}
<小时/>

可以通过更简单的方式实现 preRender,将其放在 View 中的任何位置:

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

public void preRenderView(ComponentSystemEvent event) {
// ...
}

(参数是可选的,如果从未使用过,可以省略)

<小时/>

没有像 postRenderView 这样的东西,但您可以轻松创建自定义事件。例如

@NamedEvent(shortName="postRenderView")
public class PostRenderViewEvent extends ComponentSystemEvent {

public PostRenderViewEvent(UIComponent component) {
super(component);
}

}

public class PostRenderViewListener implements PhaseListener {

@Override
public PhaseId getPhaseId() {
return PhaseId.RENDER_RESPONSE;
}

@Override
public void beforePhase(PhaseEvent event) {
// NOOP.
}

@Override
public void afterPhase(PhaseEvent event) {
FacesContext context = FacesContext.getCurrentInstance();
context.getApplication().publishEvent(context, PostRenderViewEvent.class, context.getViewRoot());
}

}

您在faces-config.xml中注册为

<lifecycle>
<phase-listener>com.example.PostRenderViewListener</phase-listener>
</lifecycle>

那么你终于可以使用了

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

public void postRenderView(ComponentSystemEvent event) {
// ...
}

关于JSF 2 相当于 IBM 的 hx :scriptCollector pre- and postRender,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13118103/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com