JSF/Primefaces 如何将另一个域中的 .xhtml 包含到您的 .xhtml 中

Posted

技术标签:

【中文标题】JSF/Primefaces 如何将另一个域中的 .xhtml 包含到您的 .xhtml 中【英文标题】:JSF/Primefaces How to include an .xhtml from another domain into your .xhtml 【发布时间】:2013-06-07 02:33:06 【问题描述】:

我正在尝试在我的 .xhtml 中包含另一个域(同一服务器上)上的 xhtml。

示例代码如下

<html 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:p="http://primefaces.org/ui">

    <h:head>
        <h:outputStylesheet library="css" name="style.css" target="body" />
    </h:head>
    <h:body>
        <p:layout id="page" fullPage="true">
            <!-- North -->
            <p:layoutUnit position="north" size="10%"
                style="border: none !important">
            </p:layoutUnit>

            <!-- South -->
            <p:layoutUnit position="south" size="5%" collapsible="true" gutter="0">
                <h:outputText value="South unit Content." />
            </p:layoutUnit>

            <!-- West -->
            <p:layoutUnit position="west" size="200" header="Menu"
                collapsible="true" effect="slide" styleClass="menuBar">
                <h:form id="form1">
                    <p:panelMenu>
                        <p:submenu label="Students">
                            <p:menuitem value="page1" update=":centerpanel"
                                actionListener="#layoutController.setNavigation('page2.xhtml')" />
                            <p:menuitem value="page2" update=":centerpanel"
                                actionListener="#layoutController.setNavigation('http://localhost:8080/externalsite/newpage.xhtml')" />
                        </p:submenu>
                    </p:panelMenu>
                </h:form>
            </p:layoutUnit>

            <!-- Center -->
            <p:layoutUnit id="center" position="center">
                <h:panelGroup id="centerpanel" layout="block">
                    <ui:include id="include" src="#layoutController.navigation" />
                </h:panelGroup>
            </p:layoutUnit>

        </p:layout>
    </h:body>

</html>

所以基本上在中心布局单元中,我试图包含外部 .xhtml(但是它在同一个域中)。

【问题讨论】:

你的意思是:包括web content或代码? 好吧,我的目的是包含一个在另一个域上的现成 webapp,并围绕它(和其他应用程序)构建一个菜单。这个想法是像上面的代码一样包含它,这本质上意味着将外部 .xhtml 中的代码包含到我自己的正确?如果有更简单的方法,我愿意接受建议。 我不知道你的系统设计,但 AFAIK 不可能! 【参考方案1】:

只有在同一个类加载器中可用时,才能包含 JSF 模板。

如果你想在你的页面中嵌入一个外部页面,你需要用户iframe

例如:

<iframe src="http://www.primefaces.org/showcase/ui/home.jsf"/>

允许您在页面中嵌入 PrimeFaces 展示。

【讨论】:

【参考方案2】:

这是不可能的。使用ui:include 标签,您只能包含来自其他 xhtml 文件的代码片段。您正在尝试做的是从另一个域访问代码,但您在最终 Web 应用程序中看到的只是生成的 HTML 和 javascript 代码。您无法在应用程序中使用它,因为您无权访问源代码。

【讨论】:

以上是关于JSF/Primefaces 如何将另一个域中的 .xhtml 包含到您的 .xhtml 中的主要内容,如果未能解决你的问题,请参考以下文章

禁用 jsf/primefaces 中的窗口功能

在重置JSF + PrimeFaces中的表单之前,检查一些必需的输入字段

JSF / PrimeFaces使用selectOneMenu将列表中的项目关联起来

刷新会话jsf2,PrimeFaces中的数据

如何将 jsf PrimeFaces 转换为引导程序?

JSF Primefaces TabView 问题