我在添加脚本时遇到问题。请找到我的代码如下
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调用工作正常,并且我能够生成矩阵。
感谢人们的帮助
希望这可以帮助其他人