我在mojarra 2.3.3的项目中使用了<f:websocket/>
标记,在项目阶段“开发”中,一切正常。但是,当项目以阶段“ Staging”部署到我们的QA系统上时,客户端产生了JS错误“未定义'mojarra'”。
这是由于jsf.js被加载为空白文件。调试时,我发现在com.sun.faces.application.resource.ResourceHelper#getInputStreamFromClientInfo
中,js文件的内容被复制到一个GZIPOutputStream中,该文件从未完成,因此未将任何内容写入包装的ByteArrayOutputStream(ll。234-237),导致响应为空给我的客户
在阶段Development
中,文件是未压缩的。
这是一个错误还是我缺少什么?是否有此配置?有解决方法吗?
我尝试将com.sun.faces.compressJavaScript
设置为false
时没有运气。
当我在流上调用GZIPOutputStream#finish()
之前,将其写入调试器中的ByteArrayInputStream时,输入流的内容正确并发送到客户端。我还检查了mojarra 2.3.8,但代码似乎没有改变。
我希望客户端收到正确的js代码。不一定必须将其压缩。
添加: 该项目在具有JDK1.8.0_161的Tomcat 8.5.14上运行,而我正在使用Primefaces(6.2)。 我创建了一个不使用Primefaces的简单工作示例here。它实际上并没有将任何内容推入websocket通道,但是这里相关的是在加载index.xhtml时的JS错误。 它还已通过Java 1.8_202,Tomcat 8.5.37,Mojarra 2.3.8进行了测试。 Mojarra 2.2.14可以正常工作(加载jsf.js)。