版本:
Apache MyFaces 2.1.14和RichFaces 4.3.5
问题:
我们正在从jsf 1.2迁移到jsf 2.我们面临着一个非常奇怪的问题:
当执行任何ajax操作时,我们会收到以下错误并且页面未刷新(或像往常一样退回)
org.apache.myfaces.context.servlet.ServletExternalContextImpl setResponseContentType
SEVERE: Cannot set content type. Response already committed
这个问题与jsf 2.0 response already commented (ajax)非常相似, 但似乎没有人回答这个问题。 它也只出现在特定的页面,其他地方的相同代码工作正常,这个错误本质上是非常随机的?
这与apache myfaces有什么关系吗? 如果有任何输入,请提供帮助。
导致这些问题的xhtml ajax代码为:a4j:commandLink
和a4j:ajax
答案 0 :(得分:2)
通常会发生这种情况,因为呈现响应阶段存在错误,部分响应已发送到客户端。然后该算法尝试渲染错误页面,但它不能,因为响应已经发送,所以你得到了问题。
解决方案通常是避免早期提交,增加响应的缓冲区大小。为此,请使用javax.faces.FACELETS_BUFFER_SIZE web配置参数(默认为1024字节)。
理论上这个参数对内存有负面影响,因为缓冲区越大,为此分配的内存就越多,但如果有足够的内存,JVM就足够快了。