1

我在 GlassFish v3.1.2 上运行 JSF-Web 应用程序

如果我在本地测试它一切正常。现在我只更改数据源,我得到了一些奇怪的行为:

例如,我有一个命令按钮,它调用一些操作来从数据库接收数据,我想在同一页面上的数据表中显示这些数据。 使用我的本地数据库可以正常工作,但是如果我使用另一个数据库(在本地 Intranet 中的不同服务器上运行),则会触发该操作(我已经使用一些 System.out 进行了检查)但是 ajax-update我的数据表不起作用。如果我在单击我的 ajax 按钮后重新加载页面,则会显示正确的数据,如果我使用非 ajax 按钮也是如此。

我什至不知道我应该寻找什么..有什么想法吗?


我在用着

  • Primfaces 3.4.2
  • JSF 2 (莫哈拉)
  • 本地数据库是 Oracle 10g XE
  • 服务器数据库是Oracle 11g
  • jdbc-driver 是来自 oracle-website 的最新 ojdbc6.jar

如果您需要更多信息,请告诉我。

在此先感谢,范特


Http-response-header:
HTTP/1.1 200 OK
X-Powered-By: Servlet/3.0 JSP/2.2 (GlassFish Server Open Source Edition 3.1.2 Java/Oracle Corporation/1.7), JSF/2.0
Server: GlassFish Server Open Source Edition 3.1.2
Cache-Control: no-cache
Content-Type: text/xml;charset=UTF-8
Content-Length: 5610
Date: Sat, 08 Dec 2012 02:05:08 GMT

我还尝试编写一个 PhaseListener 来给我一些反馈,但这也不是很有帮助。每个阶段都成功完成,并且在执行我的操作后,会向客户端发送响应(并且客户端会收到响应,正如我在 Firefox-Addon 中看到的那样)甚至是我想要显示的 List 的 Getter 方法我的 dataTable 在发送 htpp-response 之前被调用,所以我认为响应本身一切都很好。但是我要重新渲染的数据表仍然显示旧数据。

4

1 回答 1

1

但我的数据表的 ajax 更新不起作用

这很可能是由 XML 语法错误引起的。ajax 更新涉及从服务器检索 XML 响应、解析它并在 HTML DOM 树中查找要更新的元素并将其内容替换为包含在 XML 响应中的新 HTML 的步骤。使用 webbrowser 的内置 (Chrome/IE9) 或第 3 方 (Firebug) webdeveloper 工具集,您可以跟踪 HTTP 流量并全面检查 HTTP 响应,还可以使用断点调试 JavaScript 代码。这应该为您提供有关问题原因的线索。

假设在 XML 响应中生成的 HTML 代码完全相同(这是一个公平的假设,前提是您更改数据源时 webapp 的代码没有更改),那么这只能是由数据的差异引起的,即从数据库中获得。显然,数据源的变化也涉及物理数据库服务器的变化,从而提供了一些不同的数据。

根据对该问题的评论,根本原因是直接来自另一个 DB的NUL字符最终出现在 XML 响应中,导致 webbrowser 的 XML 解析器阻塞,因为它是 XML 中的非法字符。XML 规范仅指定以下字符为有效:

2.2 字符

...

字符范围

Char   ::=   #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD]  /* any Unicode character, excluding the surrogate 
             | [#x10000-#x10FFFF]                               blocks, FFFE, and FFFF. */

(角色)不在其中#x0NUL

您应该已经注意到 webbrowser 的 webdeveloper 工具集的控制台中有一个 XML 解析错误。

于 2012-12-11T12:11:59.017 回答