我们正在使用 PrimeFaces 开发一些 JSF Web 应用程序。
可以在
inputText
中复制/粘贴带有非 UTF-8 字符的文本,例如``(这是字符)并保存页面。但是渲染的 HTML 中有一个错误:
错误:禁止的代码点 U+fffe。
浏览器不显示(隐藏)错误,它显示非 UTF-8 字符(与正常情况下一样)!
但是,在该页面通过 Ajax 响应从服务器发送到浏览器后,浏览器在控制台中显示错误!用户可以看到错误!
控制台消息:
XML 解析错误:格式不正确
处理此错误的最佳方法是什么?
我有很多不好的想法。 :)
保存前验证输入!
''
可能会导致用户误解。有很多不好的字符,比如右重音字符。inputText
组件。也许我可以搜索解析 Ajax 响应的 Javascript 并对其进行修补。
“最小”复制:
我认为,主要问题是Ajax使用XML。而且 UTF-8 中有很多字符在 XML 中无效。
如果有无效字符,如何在 Java 中快速检查字符串?
其他一些事情
有一些奇怪的行为。 U+0002 字符被 jsf writer 删除。
与U+FFFE字符是其他。我写了一个验证器,它抛出 ValidatorException,但是到了 renderResponse 阶段 U+FFFE 字符出现了。
我认为这个 mojarra bug 可能是非常相似的 bug:
我已经转载了。这是 PrimeFaces Ajax 响应编写器中的一个错误。您需要向他们报告问题并让他们解决它。他们通常都很敏感。
我认为这个 mojarra bug 可能是非常相同的 bug:
https://github.com/eclipse-ee4j/mojarra/issues/4516
确实如此。几年前我已经为 Mojarra 实施修复了这个问题。这意味着您可以通过使用 Standard Faces Ajax 而不是 PrimeFaces Ajax 来解决这个问题。
一般语法
<p:commandButton value="Click" action="#{hello.ajax}"
process="@form" update="@form">
</p:commandButton>
可以重写为
<p:commandButton value="Click" action="#{hello.ajax}">
<f:ajax execute="@form" render="@form" />
</p:commandButton>
让 PrimeFaces 组件使用 Standard Faces Ajax 而不是 PrimeFaces Ajax。
也就是说,
非 UTF-8 字符
如果它确实不是 UTF-8 字符(U 代表 Unicode),它就不会列在专门介绍 Unicode 字符的网站中......;)