包含具有特定锚点的页面
Include page with specific anchor
我是 jsf 初学者,我想在 p:dialog
中打开一个 html 页面。
当我使用 <ui: include>
显示这样的页面时:
<p:dialog header="Dialog"
widgetVar="dlg"
resizable="false"
dynamic="true"
fitViewport="true">
<ui:include src="/resources/md.html" />
</p:dialog>
它没有问题,但是当我想在这样的特定锚点中打开页面时:
<p:dialog header="Dialog"
widgetVar="dlg"
resizable="false"
dynamic="true"
fitViewport="true">
<ui:include src="/resources/md.html#anchor" />
</p:dialog>
没用。
有人可以帮忙吗。
您的尝试失败,因为您的 md.html
静态包含在 'parent' jsf 页面中。因此只能使用父jsf页面来实现'go to anchor'功能。
为了在 p:dialog
中包含一个页面来实现您想要的效果,我会使用简单的 java 脚本。
JS
将此JS函数添加到您的父jsf页面(定义对话框的页面)
function gotoAnchor(anchorID) {
document.getElementById(anchorID).scrollIntoView();
}
XHTML
像这样在 p:dialog
上添加 onShow
属性
<p:dialog ... onShow="gotoAnchor('anchorID')" ...>
<ui:include src="/resources/md.html" />
</p:dialog>
其中 anchorID 是 md.html
内锚元素的 id
(在您的示例中,它的值为 'anchor')。
这样,当您的 p:dialog
显示时,将执行函数 gotoAnchor 强制页面在所需元素上滚动。
这是另一个使用 iframe tag
的解决方案,它完美地工作:
<p:commandLink value="iframe" onclick="PF('dlg').show()" />
<p:dialog header="Dialog" widgetVar="dlg">
<iframe height="500" width="800" src="/md.xhtml#anchor"></iframe>
</p:dialog>
不需要js。
我是 jsf 初学者,我想在 p:dialog
中打开一个 html 页面。
当我使用 <ui: include>
显示这样的页面时:
<p:dialog header="Dialog"
widgetVar="dlg"
resizable="false"
dynamic="true"
fitViewport="true">
<ui:include src="/resources/md.html" />
</p:dialog>
它没有问题,但是当我想在这样的特定锚点中打开页面时:
<p:dialog header="Dialog"
widgetVar="dlg"
resizable="false"
dynamic="true"
fitViewport="true">
<ui:include src="/resources/md.html#anchor" />
</p:dialog>
没用。
有人可以帮忙吗。
您的尝试失败,因为您的 md.html
静态包含在 'parent' jsf 页面中。因此只能使用父jsf页面来实现'go to anchor'功能。
为了在 p:dialog
中包含一个页面来实现您想要的效果,我会使用简单的 java 脚本。
JS
将此JS函数添加到您的父jsf页面(定义对话框的页面)
function gotoAnchor(anchorID) {
document.getElementById(anchorID).scrollIntoView();
}
XHTML
像这样在 p:dialog
上添加 onShow
属性
<p:dialog ... onShow="gotoAnchor('anchorID')" ...>
<ui:include src="/resources/md.html" />
</p:dialog>
其中 anchorID 是 md.html
内锚元素的 id
(在您的示例中,它的值为 'anchor')。
这样,当您的 p:dialog
显示时,将执行函数 gotoAnchor 强制页面在所需元素上滚动。
这是另一个使用 iframe tag
的解决方案,它完美地工作:
<p:commandLink value="iframe" onclick="PF('dlg').show()" />
<p:dialog header="Dialog" widgetVar="dlg">
<iframe height="500" width="800" src="/md.xhtml#anchor"></iframe>
</p:dialog>
不需要js。