p:overlayPanel不显示内容

p:overlayPanel does not show the content

<h:form>
    <p:dialog>
        <p:outputPanel>
            <p:panelGrid>
                <p:row>
                    <p:column>
                        <p:commandLink value="link" id="myLink"/>
                        <p:overlayPanel  id="overPanel" for="myLink" >
                            <p:outputLabel id="linkPanel" value="#{bean.value}"/>
                        </p:overlayPanel>
                    </p:column>
                </p:row>
            </p:panelGrid>
        </p:outputPanel>
    </p:dialog>
</h:form>

在上面的代码片段中,覆盖面板没有显示内容,只显示了一个空面板,但是如果我用像 value="test" 这样的硬编码值替换值,我可以在覆盖面板中看到内容,当我用 firebug 检查页面时,我可以看到内容没有放在覆盖面板的 div 内。有人可以帮忙吗?

尝试像这样使用 toString() :

<p:outputLabel id="linkPanel" value="#{bean.value.toString()}" />

我遇到了同样的错误,这解决了它。并尝试确保您的 bean 中覆盖了 toString 方法。

使您的 p:overlayPanel 延迟加载可能会解决问题。您可以通过在 p:overlayPanel 上使用 dynamic="true" 来实现它。

此技术使您的 p:overlayPanel 的内容不会在页面本身加载时呈现,而是在显示 p:overlayPanel 之前呈现。

另一种方法是从 p:commandLink 更新您的 p:outputLabel

另一种方法是在 p:overlayPanel 的 widgetwar 上使用客户端 js 函数 loadContents()。由于您将叠加层保留在数据表中,因此这可能不是一个可行的解决方案。