我很好奇在JSF/primefaces中使用ajax请求时遇到的一个边缘案例。
我发现,如果我在通过ajax处理的请求中输入表单提要字符(java中的"/f"或十六进制中的0x0C(,就会导致ajax请求失败,因为生成的xml被认为是无效的。只有当用户从另一个恰好包含该字符的文档中复制和粘贴内容时,或者更有可能是QA人员(或恶意用户(输入了该字符,试图破坏我的一天,我才会出现这种情况。
我在chrome开发工具中看到的确切响应:
<partial-responseid="j_id1">
<parsererror>
<h3>This page contains the following errors:</h3>
<div>
error on line 2 at column 68: Input is not proper UTF-8, indicate encoding !
Bytes: 0x0C 0x20 0x63 0x61
</div>
<h3>Below is a rendering of the page up to the first error.</h3>
</parsererror>
<changes>
<update id="j_idt5"/>
</changes>
</partial-response>
再现错误的示例项目
XML中似乎有一个限制,即这个字符不能包含在XML 1.0中,那么JSF/primefaces可以做些什么来避免这种情况吗?或者我对框架的要求太高了吗?如果我不能让JSF/primefaces优雅地处理这一问题,我如何才能生成一个正确的错误页面,并将问题记录在用户控制台之外的其他地方?
我认为这是一个错误,并在此处报告:https://github.com/primefaces/primefaces/issues/3875
一旦问题得到解决,我将向你汇报。
更新:这是一个Mojarra问题:https://github.com/eclipse-ee4j/mojarra/issues/4516