Web应用程序的行为似乎取决于我的数据源?

时间:2012-12-04 16:35:33

标签: java database jsf

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

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

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

我甚至不知道我应该寻找什么......任何想法?


我正在使用

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

如果您需要更多信息,请与我们联系。

提前致谢,Fant


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中看到) 甚至我希望在我的dataTable中显示的List的Getter方法在发送htpp-response之前被调用,所以我认为响应本身一切都很好。但是我想要重新呈现的dataTable仍然显示旧数据。

1 个答案:

答案 0 :(得分:1)

  

但我的数据表的ajax-update不起作用

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

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

基于对该问题的评论,根本原因是来自另一个DB的NUL character直接来自XML响应,导致webbrowser的XML解析器因为它是非法字符而窒息在XML中。 The XML specification仅指定以下字符为有效字符:

  

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解析错误。