使用extendedrenderkitservice添加脚本

时间:2014-01-13 17:17:14

标签: java javascript oracle-adf adobe-analytics

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

    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);
    }

我正在使用

  1. javax.faces.context.FacesContext;
  2. org.apache.myfaces.trinidad.render.ExtendedRenderKitService;
  3. org.apache.myfaces.trinidad.util.Service;
  4. 我实际上想要根据事件生成Omniture(按钮点击等)     afterPPRProcessing是javascript中的一个方法。代码完美运行并打印" methodCall"如

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

    我已经在'PPRProcessing'之后设置了断点。执行页面时的方法,但它不会在断点处停止。

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

    提前致谢

2 个答案:

答案 0 :(得分:1)

为了使用ExtendedRenderKitService调用任何javascript函数,函数调用必须在PPR响应中(响应是在命中请求的页面url时生成的)。在分析期间,我发现PPR Response中缺少omniture调用“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调用工作正常,我能够生成矩阵。

感谢有关人士的帮助

希望这可能有助于其他人

答案 1 :(得分:0)

此代码可能无法正常工作的原因有几个:

  1. 未定义PPRProcessing后的Javascript方法
  2. AfterPPRProcessing之后的Javascript方法没有相同数量的参数
  3. 通过触发Chrome开发者控制台确保您的javascript功能存在,并在浏览器中尝试使用此语法,看看是否一切正常。