【问题标题】:Primefaces 8.0 Calendar popup within Dialog is positioned relative to parent screen scroll position对话框中的 Primefaces 8.0 日历弹出窗口相对于父屏幕滚动位置定位
【发布时间】:2021-02-17 20:48:15
【问题描述】:

我为以下问题 p:calendar popup remain below from calendar input in dialog when scroll (on IE and Chrome) 重新创建了一个最小的可重现示例。我也遇到过这个问题,只是弄清楚发生了什么,但我不知道如何解决它。 selectOneMenu 的引用问题中的 appendTo 建议似乎不是我们可以应用于日历的属性。

复制方法如下:

  • 如果父窗口滚动到顶部,则对话框上的日历弹出框位置正确

  • 如果父窗口向下滚动一点,则对话框上的日历弹出窗口位于输入框下方一点

  • 距离偏移量似乎与父窗口的滚动量有关。

  • top 值似乎是罪魁祸首。

<?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:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:p="http://primefaces.org/ui" xmlns:pe="http://primefaces.org/ui/extensions" xmlns:o="http://omnifaces.org/ui" xmlns:of="http://omnifaces.org/functions">

<h:head>
    <title>Calendar</title>
</h:head>

<h:body>

    <h1>Calendar Popup Issue PF 8.0</h1>
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <h:panelGrid id="gridId">
        <h:panelGrid id="panelId">
            <h:form id="laborForm">
                <p:commandButton oncomplete="PF('dialogWv').show()" title="Click to open dialog" update="dialogId" value="Open dialog with popup time only calendar" />
            </h:form>
        </h:panelGrid>
    </h:panelGrid>

    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />



    <p:dialog id="dialogId" header="Test" dynamic="true" widgetVar="dialogWv" modal="true" showEffect="fade" hideEffect="fade"
        resizable="true" width="400px" height="100px">
        <h:form id="formId">
            <p:panelGrid style="margin-bottom: 5px; border: 2px; width: 100%;" id="pg1">
                <p:row>
                    <p:column colspan="2">
                        <p:calendar  value="#{cc.attrs.viewBean.backfitTime}" timeOnly="true" pattern="HH:mm" showMillisec="false" showSecond="false" required="true"
                            requiredMessage="Time is required" rendered="true" />
                    </p:column>
                </p:row>
            </p:panelGrid>
            <br />
        </h:form>
    </p:dialog>




</h:body>
</html>

编辑 我目前无法升级到 PF10,因为我的网站太多的外观和感觉都被 10 打破了。所以我的短期修复只是使用 datePicker 但使用 PF8。但是带有 PF8 的 datePicker 渲染得并不好。加上鼠标指针在递增时会覆盖小时和分钟数字。

单击向上或向下箭头是低效的。

【问题讨论】:

  • 这在 PF 10.0.0.RC1 或更高版本中已修复。我解决了这个问题。见:github.com/primefaces/primefaces/issues/6583
  • 顺便说一句,请不要把你的问题变成一个新问题。如果您有新问题,请发布新问题。

标签: css jsf primefaces


【解决方案1】:

PrimeFaces 10.0.0RC1 或更高版本已修复此问题。

问题:https://github.com/primefaces/primefaces/issues/6583

【讨论】:

  • 好的。实际上,当它第一次出现时,我确实尝试了 10,但又恢复到 8,因为它确实改变了我网站的外观。当时我还没有准备好调整我的主题。但我现在也想修复我发现的另一个错误 stackoverflow.com/a/64821946/358794 所以我想我会升级回 10。
  • 是的,主题在 10 中正在发生变化,所以如果您使用高级主题,您可能需要等待从 PrimeTek 获得新的 10 版本。
  • 没有自定义主题,我从未在 Web.xml 中指定主题,但使用样式或 styleClass 进行了调整,或者在我的命令按钮上使用了 icon="ui-icon-circle-arrow-e"。我认为我使用的图标可能已被弃用,因为它们没有显示。 10 中的禁用按钮看起来也没有禁用。数据表 groupBy 看起来已经改变,因为我现在遇到了 serlvet 错误。这就是我恢复到 8 的原因。我可能应该发布另一个关于 v10 的问题,而不是把它塞进这个评论。不抱怨也不忘恩负义,PF 很棒,只需要咬紧牙关更新我的网站。
【解决方案2】:

您应该使用p:datePicker 而不是p:calendarDatePicker 旨在替换旧的 p:calendar 组件。 p:datePicker(至少是 PrimeFaces 10 中的那个)使用 absolute 定位而不是 fixed,这样应该可以解决您的问题。

另见:

【讨论】:

  • 我没有意识到 v8 实际上有一个 datePicker 组件。
  • 我相信它从 7 开始就在那里,尽管它在那个版本中是错误的。我在 8 中使用它没有重大问题。
  • 您是否在 v8 中重新设置了 datePicker 的样式?由于 v10 在我的网站上破坏了很多东西,所以现在我只想切换到 v8 中的 datePicker,然后继续移动到 10。但弹出窗口的样式在我使用 v8 的网站中看起来不太好。请参阅我编辑的帖子以获取屏幕截图。
  • 谢谢,我已经检查过了。不希望显示 24 和 60 个单独的小时和分钟按钮。
猜你喜欢
  • 1970-01-01
  • 2017-09-06
  • 2011-01-27
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 1970-01-01
  • 2012-04-14
相关资源
最近更新 更多