0

popupPanel 内に pickList があります。popupPanel を開くと、ウィンドウの中央に表示されます。閉じて再度開くと、左と下にずれて表示されます。これは、popupPanel 内に pickList がある場合にのみ発生します。削除すると、すべてが期待どおりに機能します。

以下に、問題を再現するスニペットを示します。私は RichFaces 4.1 を使用しています。この問題は IE、Chrome、および Firefox (その他はテストされていません) で再現可能です。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html" 
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:rich="http://richfaces.org/rich" 
      xmlns:fn="http://java.sun.com/jsp/jstl/functions">

    <h:head></h:head>
    <h:body>
        <rich:popupPanel domElementAttachment="parent" id="popup" autosized="true" modal="true">
            <h:commandButton value="Close" onclick="#{rich:component('popup')}.hide();" />
            <rich:pickList>
                <f:selectItems value="#{fn:split('Test,TestTest,TestTestTest', ',')}" />
            </rich:pickList>
        </rich:popupPanel>
        <h:commandButton value="Panel" onclick="#{rich:component('popup')}.show();" />
    </h:body>
</html>
4

2 に答える 2

2

理由がわからなくても、この場合は に変更することで問題を解決できdomElementAttachment="parent"ましたdomElementAttachment="body"。ポップアップがフォーム内で定義されている場合はbodyform.

なぜこれが機能するのか、私にはまったくわかりません。説明に非常に興味があります。

于 2012-05-24T11:06:37.973 に答える
1

原因はRichfaces バグ 11736です。既知の回避策は次のとおりです。

  1. Sandros: domElementAttachment を親から本体に変更。
  2. パネルを表示する前に Javascript 関数を呼び出す:

    onbeforeshow="fixPositioning('#{rich:clientId('popupPanelId')}');"
    

    関数は次のように定義されます。

    function fixPositioning(panelId) {
        var popupPanel = document.getElementById(panelId);
        if (popupPanel) {
            popupPanel.style.visibility = "hidden";
            popupPanel.style.display = "block";
        }
    }
    

    この解決策はそこに記載されていました

于 2014-03-27T08:24:07.307 に答える