我在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>
答案 0 :(得分:2)
如果不了解原因,我可以通过将domElementAttachment="parent"
更改为domElementAttachment="body"
来解决此问题。如果在表单body
中定义了弹出窗口,则可以用form
替换。
我真的不知道为什么会这样,并且对解释非常感兴趣。
答案 1 :(得分:1)
原因是Richfaces bug 11736。已知的解决方法是:
在显示面板之前调用Javascript函数:
onbeforeshow="fixPositioning('#{rich:clientId('popupPanelId')}');"
功能定义如下:
function fixPositioning(panelId) {
var popupPanel = document.getElementById(panelId);
if (popupPanel) {
popupPanel.style.visibility = "hidden";
popupPanel.style.display = "block";
}
}
此解决方案描述为there