Элемент div ibm-jsf HX_DLG_SCRATCH
Это данные из 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 и обнаружил, что при удалении элемента с идентификатором HX_DLG_SCRATCH_0 это белое облако исчезает, например, диалоговое окно может быть закрыто, но фон приложения остается ("нормальное поведение", например, в Firefox заблокированный диалог, но фон приложения серый, нет никаких элементов приложения, которые находятся позади диалога). Этот элемент сгенерирован ibm-jsf.
Это элемент из IE DOM explorer:
<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>
И это часть jsp-кода диалога editBookActionDialog.jsp, который использует ajax.
<hx:ajaxRefreshRequest id="ajaxRefreshRequest1"
target="subview1:panelForm2:editBookActionDialog"
params="itemId;newItem"
onstart="showProgressBar();" oncomplete="hideProgressBar();">
</hx:ajaxRefreshRequest>
Я не могу отследить, почему это происходит только в IE, в Firefox все работает нормально.
Пожалуйста, любые указания или информация о нем будут очень благодарны.
Заранее большое спасибо,
mismas
[EDIT] Просто мысль, которая пришла мне в голову сейчас.
Может быть, это "белое облако" должно быть серым фоном, но в IE что-то смешивается с CSS...
Мне кажется, что это может быть правильным ключом, поскольку нет ошибок JavaScript или каких-либо других ошибок...
Поправь меня, если думаешь, что я что-то упустил... Спасибо!
[EDIT2 - ВАЖНО]
Я прибил причину этого!
Это проблема CSS.
position: absolute этого паршивого элемента HX_DLG_SCRATCH_0 вызывает проблему.
Не могли бы вы посоветовать, как переопределить эту сгенерированную ibm-jsf позицию: абсолютную в позицию: относительную?
Также я хотел бы добавить этот "хак" только для IE. Я знаю, что это нехорошо, но это очевидно в духе всего приложения:)
Tnx!
1 ответ
Рант:
Извините, я скоро обвинил ibm-jsf, что это проблема пользователя (разработчика, написавшего код).
Тем не менее, находясь в поисках решения, у меня была возможность глубже покопаться в jsf, и я могу сказать об этом только одно: это ужасно, и я ненавижу его внутренности.
Конец разглагольствования:D
Настоящая проблема была в javascript, Mozilla Firefox визуализировал страницу немного менее болезненно, но IE сломался (заблокировал все).
Итак, у меня была страница jsp с флажком, который отображался только при некоторых условиях, но в некотором теге hx был размещен вызов функции javascript custum (прямо перед функцией openDialog()), которая выполняла некоторую проверку этого конкретного флажка.
Так как в этом случае флажок физически не существовал в сгенерированном HTML, и эта функция javascript вызывалась, это вызывало странное / плохое поведение приложения, которое трудно отследить.
Таким образом, решение состояло в том, чтобы добавить тест условия (такой же, как для рендеринга флажка), чтобы вызвать функцию javascript и openDialog(), если флажок должен быть отображен, в противном случае вызовите просто openDialog().
Вот и все, надеюсь, что это может как-то помочь кому-то с той же проблемой "белого облака"... (Я сомневаюсь в этом, но тем не менее вот оно:)
PS
Было странно, что инструменты разработчика IE не жаловались ни на какую ошибку JavaScript...
Я не уверен, почему это так... (если у кого-то есть подсказка, я буду рад здесь это...:)
С наилучшими пожеланиями,
mismas