Appfuse这个范本网站结合了很多的Plugin,其中的一项Plugin叫做SiteMesh,这个SiteMesh Plugin的功能,就是帮助开发人员在网页的制作上,将Header与Footer另外切出来,这个可以让开发人员专心在每个页面的制作上,而且如果Header或Footer需要变更时,只要变更一页即可,不需要每一页去进行修改。

SiteMesh在Appfuse中的宣告

在实作SiteMesh时,必须在web.xml中宣告sitemesh的filter,这个部份Appfuse已经帮我们处理好了,Appfuse在web.xml中宣告sitemesh的内容为:

之后我们就可以在WEB-INF/decorators.xml里面设定对应的网页。

SiteMesh在Appfuse中的使用

在decorators.xml中,Appfuse帮我们定义好网页的Header、footer了,如下图:

  1. 第一行宣告了预设的资料夹。

  2. 第二~七行,宣告这一类的网址不使用sitemesh机制。

  3. 在第八~十行,宣告所有的网址(/*)都要套用defalut.jsp(在/decorators的资料夹下)。

而展开default.jsp后可以看到跟sitemesh有关的内容如下:(名词说明:范本页→default.jsp,内页→实际要读取的页面,被镶嵌在范本页中的JSP)

首先是被include进来的taglib.jsp里宣告了sitemesh的JSTL:

Default.jsp的第十行:

将内页的的title放置在范本页的这里;

第十五行,将内页的head放置在这里,不过因为default.jsp的jQuery在17才会import进来,所以会导至我们内页吃不到jQuery,所以笔著会把十五行的<decorator:head />移到</head>的上方,这样我们的内页在使用JQuery时才会不有问题,如下图:

第49行(因为上方有加了一行,原本是48行),将内页的body放在这里。

所以最后使用者看到的Header与Footer是以default.jsp为主,而实际上页面显示的资料,则根据内页的JSP的不同而变化,这就是sitemesh在Appfuse中的应用。

相关文章