如何在p:TabMenu中使用ui:composition

时间:2012-10-06 14:50:58

标签: jsf jsf-2

我正在研究如何使用Primefaces 3.4.1 p:TabMenu

主页:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"    
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui"
      xmlns:c="http://java.sun.com/jsp/jstl/core">
    <h:head>

    </h:head>
    <h:body>

        <div id="settingsHashMapz" class="settingsHashMap" style="width:1150px; height:400px; position:absolute; top:20px; left:1px">

            <p:tabMenu id="tabs" activeIndex="0" >  
                <p:menuitem value="tab1" url="/tab1.jsf" />  
                <p:menuitem value="tab2" url="/tab2.jsf" />  
                <p:menuitem value="tab3" url="/tab3.jsf" />

            </p:tabMenu>  
        </div>   
    </h:body>
</html>

标签页1:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"    
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui"
      xmlns:c="http://java.sun.com/jsp/jstl/core">
    <h:head>

    </h:head>
    <h:body>
        <ui:composition>
            <h:panelGroup>
                <h:form id="tab1" >
                    ................. 
                </h:form>         
            </h:panelGroup>
        </ui:composition>
    </h:body>
</html>

我在尝试使用p:tabMenu时发现了一个问题。我无法正确使用ui:composition。我必须在每个标签页中声明名称空间,因为它们不能使用主JSF页面中的名称空间。如果我将所有命名空间声明到选项卡页面中,我必须等待~3秒才能从服务器传输Javascript库。正如你所看到的那样浪费资源:

GET http://server:8080/DCProfileTabGenerators.jsf 200 OK 29ms                              jquery....min.js (line 4)
GET http://server:8080/javax.f...uery/jquery.js.jsf?ln=primefaces&_=1349526707969 200 OK 11ms   jquery....min.js (line 4)
GET http://server:8080/javax.f.../primefaces.js.jsf?ln=primefaces&_=1349526708568 200 OK 8ms   jquery....min.js (line 4)
GET http://server:8080/javax.f...source/jsf.js.jsf?ln=javax.faces&_=1349526708949 200 OK 8ms   jquery....min.js (line 4)
GET http://server:8080/resources/js/tabs.js?_=1349526709016 200 OK 10ms

如何将声明到主JSF页面的名称空间用于标签JSF页面?

1 个答案:

答案 0 :(得分:2)

在页面顶部声明命名空间不会带来任何实际的性能损失。它只是声明您希望在给定页面文件上使用哪些名称空间。实质上没有真正的方法可以做到这一点,但这不是必要的。

以下GET请求用于将必要的javascript库,样式表和图像下载到客户端。根据客户端浏览器设置,这些设置应在第一个请求之后进行缓存,以便此客户端在整个应用程序中导航页面时不必多次下载它们。