这是来自jsf-ibm.jar (MANIFEST. jar)的数据。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中它工作得很好。
请,任何形式的指导或信息,我将非常感激。提前谢谢你,
米斯迈斯(以下简称mm)
[编辑]只是我现在想到的一个想法。
也许这个"白云"应该是灰色的背景,但在IE中有些东西会与css混淆…
在我看来,这可能是正确的线索,因为没有javascript错误或任何其他类型的错误…
纠正我,如果你认为我错过了什么…非常感谢!
[EDIT2 - IMPORTANT]
我找到了原因!
这是一个css问题。这个糟糕的HX_DLG_SCRATCH_0元素的position: absolute导致了这个问题。
你能告诉我如何重写ibm-jsf生成的position:absolute到position:relative吗?
此外,我想添加这个"hack"仅为IE。我知道这不是很好,但它显然符合整个应用程序的精神:)
Tnx !
Rant:
很抱歉我这么快就指责ibm-jsf,这是用户(编写代码的开发人员)的问题。然而,在挖掘解决方案的同时,我有机会深入研究jsf,我只能说一件事:它很糟糕,我讨厌它的内脏。
结束:D
真正的问题是在javascript中,Mozilla Firefox渲染的页面不那么痛苦,但是IE崩溃了(阻止了所有内容)。所以,我有一个jsp页面,有一个复选框,只在某些条件下呈现,但在一些hx标签有自定义javascript函数调用放置(就在openDialog()函数之前),在特定的复选框上运行一些验证。因为,在这种情况下,复选框在生成的HTML中并不存在,并且调用了这个javascript函数,这导致了奇怪/糟糕的应用程序行为,难以追踪。
所以解决方案是添加一个条件测试(与复选框渲染相同)来调用javascript函数和openDialog(),如果复选框应该被渲染,否则只调用openDialog()。
就是这样,希望它能以某种方式帮助那些有同样"白云"问题的人……(我对此表示怀疑,但无论如何,它在这里:)
注:
很奇怪,IE开发工具没有抱怨任何javascript错误…
我不知道为什么会这样……如果有人有线索,我很乐意告诉你……:)
最诚挚的问候,米斯迈斯(以下简称mm)