我正在使用PrimeFaces 5.0.5和GlassFish服务器3.1.2.2。
我在<ui:fragment>
中添加了一个selectonemenu,然后将其包含在另一个XHTML页面中。
当我打开选择菜单并使用鼠标滚轮滚动时,面板将随页面浮动。
最初,我尝试编辑CSS文件,因为我猜它可能是位置问题,但事实并非如此。
然后,我从展示中复制了源代码,滚动时面板仍然分开。
纯HTML下拉列表和<h:selectOneMenu>
都很好,我不知道为什么它不能与<p:selectOneMenu>
一起使用。
我可以找到一些提及此问题的帖子,但它们与旧版本的PrimeFaces有关。
问题仍然存在或已在505中修复?如果是,我该如何解决这个问题?
感谢任何反馈和评论。
非常感谢。
p:selectOneMenu dropdown not attached to the component inside a dialog
<ui:fragment
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.org/ui">
<h:panelGroup
id="cPanel"
layout="block"
styleClass="contentArea product">
<div class="mainColumnContainer">
<div class="mainColumn">
...
<div id="try">
<form>
...
<h:panelGroup>
<h:form>
<p:messages autoUpdate="true" />
<h:panelGrid columns="2" style="margin-bottom:10px" cellpadding="5">
<p:outputLabel for="console" value="Basic:" />
<p:selectOneMenu id="console" value="#{selectOneMenuView.console}">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItem itemLabel="Xbox One" itemValue="Xbox One" />
<f:selectItem itemLabel="PS4" itemValue="PS4" />
<f:selectItem itemLabel="Wii U" itemValue="Wii U" />
</p:selectOneMenu>
<p:outputLabel for="car" value="Grouping: " />
<p:selectOneMenu id="car" value="#{selectOneMenuView.car}">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{selectOneMenuView.cars}" />
</p:selectOneMenu>
<p:outputLabel for="city" value="Editable: " />
<p:selectOneMenu id="city" value="#{selectOneMenuView.city}" effect="fold" editable="true">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{selectOneMenuView.cities}" />
</p:selectOneMenu>
</h:panelGrid>
...
的问候, REK
答案 0 :(得分:19)
问题是这些浮动div是使用绝对定位创建的,当你有布局或对话框或破坏页面流的东西时,这些p:selectOneMenu
&#34;面板&#34;即使您滚动布局或容器,也会保持相同的绝对位置,因为它们默认连接到正文。
所以解决这个问题的一种方法是将它们附加到自己身上,这样绝对面板会出现在页面流程中的选择旁边,并且不会随着那些&#34;内部滚动而移动&#34;:
<p:selectOneMenu id="console" value="#{selectOneMenuView.console}" appendTo="@this">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItem itemLabel="Xbox One" itemValue="Xbox One" />
<f:selectItem itemLabel="PS4" itemValue="PS4" />
<f:selectItem itemLabel="Wii U" itemValue="Wii U" />
</p:selectOneMenu>
使用属性appendTo
:
将叠加层追加到搜索表达式定义的元素。 默认为文件正文。
如果您在对话框中使用它,则可以按对话框高度剪切面板,因为它的样式为overflow: hidden
。所以另一个解决方案是应用position:fixed,你可以用:
panelStyle="position: fixed;"
答案 1 :(得分:4)
你可以使用panelStyle =“position:fixed;”在selectOneMenu
中答案 2 :(得分:0)
我有一个非常相似的问题,将selecOneMenu元素放置在表单元格的对话框窗口中,并且在抄写时下拉列表与父级一起移动。
解决方案appendTo="@this"
和panelStyle="position:fixed;"
都可以正常工作,但是将p:selectOneMenu
元素作为数据表的一部分会使下拉列表隐藏在其所在元素的“下方”。
panelStyle="position:fixed;"
完全解决了该问题,因为无论滚动在其所在元素的顶部如何,它都保持在该位置。