Extendedrenderkitservice

Extendedrenderkitservice

我在添加脚本时遇到问题。请找到我的代码如下

    FacesContext facesContext = FacesContext.getCurrentInstance();
    ExtendedRenderKitService extendRenderKitService = Service.
        getRenderKitService(facesContext, ExtendedRenderKitService.class);
    try {
        String methodCall = "afterPPRProcessing('" + journeyId + "',new Array (" + dynamicParams + "))";
        System.out.println( "methodCall::" + methodCall);
        extendRenderKitService.addScript(facesContext, methodCall);
    } catch (Exception ex) {
        System.out.println("exception while PPR processing ", ex);
    }


我在用


javax.faces.context.FacesContext;
org.apache.myfaces.trinidad.render.ExtendedRenderKitService;
org.apache.myfaces.trinidad.util.Service;


我实际上想基于事件(如按钮单击等)生成Omniture。
afterPPRProcessing是javascript中的一种方法。该代码可以完美运行,并且还可以将“ methodCall”打印为

methodCall::afterPPRProcessing('abc',new Array ('xyz','pqr'))


我在执行页面时在'afterPPRProcessing'方法中设置了断点,但是它并没有在断点处停止。

请帮助我了解未生成标记的原因是什么。编写代码时是否犯了任何错误?

提前致谢

最佳答案

为了使用ExtendedRenderKitService调用任何javascript函数,该函数调用必须存在于PPR响应中(响应是在命中所请求页面URL时生成的响应)。在分析过程中,我发现PPR响应中缺少通用调用“ afterPPRProcessing”,其原因是使用上述代码从Bean类添加脚本后,有一个代码可以刷新整个页面。下面是该代码

    FacesContext context = FacesContext.getCurrentInstance();
    String viewId = context.getViewRoot().getViewId();
    ViewHandler handler = context.getApplication().getViewHandler();
    UIViewRoot root = handler.createView(context, viewId);
    root.setViewId(viewId);
    context.setViewRoot(root);


这段代码用于刷新页面,而此方法用于捕获PPR事件(打开/关闭)。结果,该脚本未添加到ExtendedRenderKitService中的facesContext。

注释掉此代码后,PPR调用工作正常,并且我能够生成矩阵。

感谢人们的帮助

希望这可以帮助其他人

10-08 17:24