0

这是来自 jsf-ibm.jar(MANIFEST.MF 文件)的数据,以提供有关我当前正在处理的应用程序正在使用的 jsf 版本的信息:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.2
Created-By: IBM Corporation
Specification-Title: Java Server Faces
Implementation-Title: JSF Widget Library (JWL) - Base
Implementation-Version: JWL v3_1_13
Implementation-Vendor: IBM
Build-Version: 20120307.2306
Build-Date: March 7 2012
Copyright-Info: Copyright (c) 2003,2008, International Business Machin
es Corporation.  All Rights Reserved.

我一直在追逐和解决这种奇怪的应用程序行为,这种行为只发生在 IE 中。
有链接,当点击它时,对话框应该打开(带有一些可以编辑和保存的数据的表格等)。但是当点击链接时,对话框会打开,但整个应用程序都是我称之为“白云”的东西。整个应用程序和对话框都是模糊的,什么都不能点击。然后,我单击浏览器 (IE) 刷新按钮,该按钮关闭对话框并返回包含链接所在数据列表的页面。
我尝试使用 IE 开发人员工具,发现当删除 id 为 HX_DLG_SCRATCH_0 的元素时,这个白云就会消失,例如可以关闭对话框,但应用程序的背景仍然存在(例如 Firefox 中的“正常行为”将不是被阻止的对话框,但应用程序的背景是灰色的,对话框后面没有应用程序元素)。此元素由 ibm-jsf 生成。
这是来自 IE DOM 资源管理器的元素:

<BODY bodyUnloadEventNum="1" marginwidth="0" marginheight="0" hasbox="2" boxItem="    [object]"><DIV id=HX_DLG_SCRATCH_0 style="FONT-SIZE: 1px; BORDER-TOP: 0px; HEIGHT: 1166px; BORDER-RIGHT: 0px; WIDTH: 1676px; BORDER-BOTTOM: 0px; POSITION: absolute; PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; LEFT: 0px; FILTER: progid:DXImageTransform.Microsoft.Alpha(enabled=false); MARGIN: 0px; BORDER-LEFT: 0px; Z-INDEX: 10001; TOP: 0px; PADDING-RIGHT: 0px; BACKGROUND-COLOR: #e2e2e2"    name="HX_DLG_SCRATCH_0" hasbox="2" boxItem="[object]"></DIV></BODY>
</html>

这是链接所在页面的jsp代码的一部分:

<h:outputLink id="link1" rendered="#{not empty book.bookType}">
<h:outputText id="text1" value="#{msg[book.bookType.tag]}"
styleClass="outputText">
</h:outputText>
<hx:behavior event="onclick" behaviorAction="get;show;stop" id="behaviour1"
targetAction="subview1:panelForm2:editBookDialog;subview1:panelForm2:editBookActionDialog"
onActionFunction="setvalue('subview1:panelForm2:newItem', 'edit'); setvalue('subview1:panelForm2:itemId', '#{book.bookId}');"></hx:behavior>
</h:outputLink>

这是使用ajax 的editBookActionDialog.jsp 对话框的jsp 代码的一部分。

<hx:ajaxRefreshRequest id="ajaxRefreshRequest1"
target="subview1:panelForm2:editBookActionDialog"
params="itemId;newItem"
onstart="showProgressBar();" oncomplete="hideProgressBar();">
</hx:ajaxRefreshRequest>

我无法追查为什么这只会在 IE 中发生,在 Firefox 中它可以正常工作。
请提供任何有关它的指导或信息,我们将不胜感激。
非常感谢你,
mismas

[编辑] 只是我现在想到的一个想法。
也许这个“白云”应该是那个灰色的背景,但是在 IE 中有些东西与 css 混淆了......
在我看来这可能是正确的线索,因为没有 javascript 错误或任何其他类型的错误.. .
如果您认为我遗漏了什么,请纠正我... thnx!

[EDIT2 - 重要]
我确定了它的原因!
这是一个CSS问题。position: absolute 这个糟糕的 HX_DLG_SCRATCH_0 元素导致了这个问题。
您能否建议如何将这个 ibm-jsf 生成的位置:absolute 覆盖为 position:relative?
另外,我想只为 IE 添加这个“hack”。我知道这不好,但这显然符合整个应用程序的精神:)
Tnx!

4

1 回答 1

0

Rant:
对不起,我很快就指责了 ibm-jsf,这是用户(编写代码的开发人员)的问题。
尽管如此,在寻找解决方案的同时,我有机会更深入地研究 jsf,对此我只能说一件事:它太糟糕了,我讨厌它的胆量。
咆哮结束 :D
真正的问题出在 javascript 中,Mozilla Firefox 使页面变得不那么痛苦,但是 IE 崩溃了(阻止了一切)。
因此,我的 jsp 页面有一个复选框,该复选框仅在某些条件下呈现,但在某些 hx 标记中放置了 custum javascript 函数调用(就在 openDialog() 函数之前),该调用对该特定复选框运行了一些验证。
由于在这种情况下,复选框实际上并不存在于生成的 HTML 中,并且调用了这个 javascript 函数,因此它导致了奇怪/不良的应用程序行为,难以追踪。
所以解决方案是添加一个条件测试(与复选框渲染相同)来调用javascript函数和openDialog(),如果应该渲染复选框,否则只调用openDialog()。
就是这样,希望它可能会以某种方式帮助有同样“白云”问题的人......(我对此表示怀疑,但仍然在这里:)
PS
奇怪的是,IE 开发人员工具没有抱怨任何 javascript错误......
我不知道为什么会这样......(如果有人有线索,我会很高兴在这里...... :)

最好的问候,
mismas

于 2014-08-23T12:43:47.263 回答