【问题标题】:Display a p:overlayPanel at a specific position relative to another component (p:graphicImage)在相对于另一个组件的特定位置显示 p:overlayPanel (p:graphicImage)
【发布时间】:2014-10-25 17:05:46
【问题描述】:

使用<p:overlayPanel>显示<p:fileUpload>,当点击<p:graphicImage>时如下。

<p:graphicImage id="image"
                library="default"
                name="test/Sunset.jpg"
                style="left: 400px; top: 100px; position: relative;"
                height="200"
                width="200"/>

<p:overlayPanel for="image" my="top left" at="bottom right"
                dynamic="true" showCloseIcon="true" dismissable="true">

    <p:fileUpload mode="advanced"
                  fileLimit="1"
                  allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
                  fileUploadListener="#{bean.listener}"/>
</p:overlayPanel>

点击给定的&lt;p:graphicImage&gt; 时,&lt;p:fileUpload&gt; 会显示在&lt;p:overlayPanel&gt; 中,如下图所示。

但是,我需要以 右下角&lt;p:overlayPanel&gt; 位于左上角 给定的&lt;p:graphicImage&gt; (只是因为这不必要地在浏览器上引入了一个丑陋的水平滚动条,实际上是在其中实现的(在&lt;p:dataTable&gt; 内)。

这些属性my="top left" at="bottom right" 应该可以解决问题,但实际上并没有。

这是否可以实现?


根据answer,上传文件时&lt;p:fileUpload&gt;如下所示。

这远离删除浏览器中的水平滚动条。

【问题讨论】:

    标签: jsf primefaces jsf-2.2


    【解决方案1】:

    一种方法是使用 onshow 事件动态调整 &lt;p:overlayPanel&gt; 的大小以匹配 &lt;p:graphicImage&gt; 尺寸。

    这是一个例子:

    <h:form id="form">
        <p:graphicImage id="img" value="/res/img/img.jpg" />
    
        <p:overlayPanel id="overlay" for="img" my="right bottom" at="left bottom" onShow="resize();" >
            <p:fileUpload />
        </p:overlayPanel>
    
        <script type="text/javascript">
            function resize() {
                $("[id='form2:overlay']").css("left", "auto");
                $("[id='form2:overlay']").css("right", $("[id='form2:img']").css("width"));
            }
        </script>
    </h:form>
    

    编辑:

    修复了在表单中工作的代码。

    编辑 2:

    更改了代码以将叠加层的右侧动态定位在 img 的左侧。 由于img在右边最后一列,我们可以从右边的绝对位置减去img的宽度。

    【讨论】:

    • 没什么不同?
    • 当从文件浏览器中选择一个文件(图像)时(在问题正文中附加了一张图片),&lt;p:fileUpload&gt; 看起来很丑,并且不会从浏览器中删除水平滚动条(如前所述在问题中)。
    • @Tiny 对不起,我完全误解了这个问题。我提供了一个代码来将&lt;p:graphicImage&gt;&lt;p:overlayPanel&gt; 重叠。根据您的问题,您是说您想要that the bottom right corner of this &lt;p:overlayPanel&gt; positions over the top left corner of the given &lt;p:graphicImage&gt;。这意味着您仍然想在面板打开时看到图像?另外,您提到的水平滚动条是因为面板的宽度还是因为它的位置?
    • 图片是否可见或与&lt;p:overlayPanel&gt;重叠无关。有一个&lt;p:dataTable&gt; 向右侧水平扩展以适应整个浏览器窗口(水平)。在这个&lt;p:dataTable&gt; 的每一行的最后一列中,显示了一个&lt;p:graphicImage&gt;。当单击此&lt;p:graphicImage&gt; 时,会弹出一个&lt;p:overlayPanel&gt;(其中包含&lt;p:fileUpload&gt;)。由于这个&lt;p:overlayPanel&gt;的显示位置,引入了水平滚动条。
    • 我不是 100% 确定,但如果 &lt;p:overlayPanel&gt; 显示在问题中所说的特定位置,那么水平滚动条可能会消失,但现在,这是不确定的,因为我尚未成功在该位置显示&lt;p:overlayPanel&gt;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    相关资源
    最近更新 更多