JSF 2.0 AJAX调用失败

时间:2011-06-20 20:48:37

标签: ajax jsf facelets

我正在开发一个项目,使用JSF1.2,JSP,Struts,Tiles,Richfaces来获取现有项目......只需使用JSF2.0,内置facelets支持,并将Richfaces更新到版本4。

到目前为止,除了一个主要的路障外,事情进展顺利。我正在尝试将以前使用<a4j:support>标记处理的AJAX组件更新为<f:ajax>标记,而不是按照我希望的方式工作,我收到的错误是我只能解释的因为我忘记了配置一切的事情。

这是在com.sun.faces.context.PartialViewContextImpl.createPartialResponseWriter()方法中抛出的NullPointerException。

当我第一次加载页面时,我可以在调试器中看到组件正确绑定到支持值;页面加载没有事件。当我尝试激活所述组件上的AJAX事件时,它会爆炸。我收到一个错误,没有通过AJAX更新。我尝试转换的每个AJAX组件都在发生这种情况。这是一个这样的例子:

        <h:selectOneMenu
        value="#{userSession.selectedNetwork}"
        id="network"
        >
        <f:selectItems value="#{userSession.networkUIOptions}" />
        <f:ajax event="change" render="selectedStation edit_site_button add_site_button"/>
    </h:selectOneMenu>

我不知道这是否相关,但我在该代码中引用的bean现在已经注释了JSF2.0并从faces-config.xml中删除了,但是,我还没有完全摆脱faces-config.xml。仍在努力转换一切。另外,我在Tomcat 6.0上运行它。

任何帮助,建议将不胜感激。我真的坚持这个问题。

编辑1:

根据我下载的软件包标题使用mojarra 2.1.1版。无法获得精确的堆栈跟踪。在改变这么多东西之后,记录似乎没有正常工作。会继续努力。也将尝试简单的页面和报告结果。

编辑2: 因此,尝试“最小化”页面产生相同的结果,同样的错误。

仍然无法让伐木工作正常,所以只是做了一些贫民窟的伐木。请参阅下文,了解类似于正确堆栈跟踪的内容:

编辑3: 好的,用行号更新了ghetto堆栈跟踪。你猜对了第​​一堂课中的行号是错误的: http://pastebin.com/49yUDcPM

NPNSessionFilter.java的

doFilter函数: http://pastebin.com/iwG0rcQ6

我为BalusC创建的测试页面建议: http://pastebin.com/kSeUyj7g

编辑4:

http://tinypic.com/r/2dca0yo/7 http://tinypic.com/r/16jet7s/7

以下是当前打包在WAR的WEB-INF / lib文件夹中的库的图像。以前的程序员包含了很多我还没有清理过的垃圾。同样,不确定struts JAR的来源。删除了我发现的与strusts或tiles相关的任何pre-dist JAR。

编辑5:

好的,突破!这个评论带来了一个与众不同的世界“同样,不确定struts JAR的来源。删除了任何与strusts或tiles相关的pre-dist JAR。”

清洁耳朵,重新分开,现在情况更好。显然,这不仅仅是我忘记删除的一些库,而是我忘记删除的库,然后在删除后清除EAR。 AJAX请求现在正在通过,我可以看到调试器值在请求到来时被重新绑定!加载其他问题,但可以在我自己的时间管理这些问题。 BalusC,你带我到这个解决方案;如果你想提交答案我很乐意接受它!

1 个答案:

答案 0 :(得分:4)

  

com.sun.faces.context.PartialViewContextImpl中的NullPointerException:PartialViewContextImpl.java:createPartialResponseWriter:441

此异常表明JSF视图root为null,这反过来表明在类路径中有一些JSF 1.2针对第三方或自定义ViewHandler,这对于JSF 2.0并不完全正确。因此也需要升级(或完全删除)。

根据您的截图以及所有JAR的概述,struts-faces JAR是主要的嫌疑人。但是那些混合版本的Apache Commons和JSTL库也看起来不正确。