Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 如何消除警告:PWC4011:无法将请求字符编码设置为UTF-8_Jsf 2_Primefaces_Glassfish 3_Mojarra - Fatal编程技术网

Jsf 2 如何消除警告:PWC4011:无法将请求字符编码设置为UTF-8

Jsf 2 如何消除警告:PWC4011:无法将请求字符编码设置为UTF-8,jsf-2,primefaces,glassfish-3,mojarra,Jsf 2,Primefaces,Glassfish 3,Mojarra,这是在GlassFish 3.1上,在Mojarra上使用PrimeFaces,并用MyFaces CODI腌制。对于几乎每个请求,都会显示以下消息: 警告:PWC4011:无法从context/com.myapp_war_0.1将请求字符编码设置为UTF-8,因为已读取请求参数,或者已调用ServletRequest.getReader() 自从我开始这个项目以来,这种情况就一直发生——到目前为止,我一直忽略它,但现在我意识到我在浪费大量时间阅读它。我发现了一个有趣但不完整的作品,但我不明白

这是在GlassFish 3.1上,在Mojarra上使用PrimeFaces,并用MyFaces CODI腌制。对于几乎每个请求,都会显示以下消息:

警告:PWC4011:无法从context/com.myapp_war_0.1将请求字符编码设置为UTF-8,因为已读取请求参数,或者已调用ServletRequest.getReader()

自从我开始这个项目以来,这种情况就一直发生——到目前为止,我一直忽略它,但现在我意识到我在浪费大量时间阅读它。我发现了一个有趣但不完整的作品,但我不明白


有人能建议如何在不抑制其他可能的警告消息的情况下压制此消息吗?

JSF/Facelets默认使用UTF-8解码HTTP请求参数。GlassFish本身默认使用ISO-8859-1对HTTP请求参数进行解码。HTTP请求参数只能被解析和解码一次,每当代码第一次请求一个请求参数时就会发生这种情况,比如so
request.getParameter(“name”)
。因此,如果在JSF将请求参数编码设置为UTF-8之前第一次请求请求参数,那么它将(错误地)使用ISO-8859-1进行解析

当JSF需要在恢复视图阶段设置请求参数编码时,如下所示:

request.setCharacterEncoding("UTF-8");
虽然已经解析了请求参数,但GlassFish将准确显示此警告

不必要的结果是,所有这些HTTP请求参数可能最终都会被删除。表单数据最初是使用UTF-8提交和编码的。如果使用不同的字符集(如ISO-8859-1)对UTF-8数据进行解码,则8位及以上范围内的字符(通常是那些“特殊字符”,如
a
ö
等)将被破坏,并以
Ã
Ã
等结束

从技术上讲,正确的解决方案是在JSF设置正确的编码之前,请求HTTP请求参数。基本上,您需要检查在JSF的还原视图阶段之前运行的所有代码,如servlet过滤器、阶段侦听器等,如果它们不这样做的话

如果您似乎找不到它,或者代码超出了您的控制范围,那么您可以告诉GlassFish使用UTF-8来解码HTTP请求参数,这样当JSF想要获取这些参数时,就不需要对其进行更改。您可以通过在
/WEB-INF/GlassFish WEB.xml
文件的
中添加以下条目来实现:

<parameter-encoding default-charset="UTF-8"/>
并确保它在需要收集任何HTTP请求参数的任何其他过滤器之前被映射



更新:至于GlassFish为什么事先设置了它,这可能是由PrimeFaces引起的。另请参见以下相关问题:。

根据我的经验,这条著名的消息在升级mojarra版本后丢失。您使用的是哪一个版本?@Osw:最早的mojarra 2.0.x版本中确实有一个相关的bug,但那是ca被一个稍有不同的问题使用,并且只影响Ajax请求。不过OP使用的是捆绑JSF 2.1的GF 3.1。@osw:具体地说,我使用的是GF 3.1.1 Build 12。我可能不应该,但我让Netbeans和GF在更新可用时立即下载所有更新。不过,我几乎在每个版本级别都会想起这个问题。不过,它会消失直到我测试了很多页面,在这个过程中生成了足够多的错误消息,我才被激励对此采取行动。顺便说一句,这个包中的Mojarra版本是2.1.3(FCS b02)。很好,这很有效。再次感谢。我想知道为什么这样的信息这么难找到?如果没有这项web服务,我会比我的计划落后得多!不客气。在和我的其他文章中提到了这一点。+1,在Java EE方面,你真是个天才。希望我能拥有你的大脑:-)我将征服互联网:-)我曾尝试使用GlassFish v3.1.2和JSF 1.2.15这样做,但运气不好:-(@BalusC我在访问GlassFish管理服务器页面时收到此警告。我猜您提到的文件是“C:\GlassFish 3\GlassFish\lib\install\applications\uuu admingui\WEB-INF\sun WEB.xml”?如果是这样,则此文件已将参数编码标记设置为UTF-8。是否有其他方法可以消除此警告?(我正在使用Glassfish的干净安装)。
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);