最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

jsp中sitemesh修改tagRule技術(shù)分享

 更新時(shí)間:2017年12月26日 08:41:34   作者:Mr_Qi  
這篇文章主要介紹了jsp中sitemesh修改tagRule技術(shù)以及詳細(xì)代碼分析,有需要的朋友跟著小編一起學(xué)習(xí)參考下吧。

sitemesh默認(rèn)提供了一些常用的rule

可以看到其實(shí)可以選擇

/**
 * Extracts the contents of any elements that look like
 * <code>&lt;content tag='foo'&gt;...&lt;/content&gt;</code> and write the contents
 * to a page property (page.foo).
 *
 * <p>This is a cheap and cheerful mechanism for embedding multiple components in a
 * page that can be used in different places in decorators.</p>
 *
 * @author Joe Walnes
 */
public class ContentBlockExtractingRule extends BasicBlockRule<String> {
 private final ContentProperty propertyToExport;
 public ContentBlockExtractingRule(ContentProperty propertyToExport) {
  this.propertyToExport = propertyToExport;
 }
 @Override
 protected String processStart(Tag tag) throws IOException {
  tagProcessorContext.pushBuffer();
  return tag.getAttributeValue("tag", false);
 }
 @Override
 protected void processEnd(Tag tag, String tagId) throws IOException {
  propertyToExport.getChild(tagId).setValue(tagProcessorContext.currentBufferContents());
  tagProcessorContext.popBuffer();
 }
}

修改ScriptTagRuleBundle處理如下

public class ScriptTagRuleBundle implements TagRuleBundle {
 @Override
 public void install(State defaultState, ContentProperty contentProperty, SiteMeshContext siteMeshContext) {
  defaultState.addRule("content", new ContentBlockExtractingRule(contentProperty.getChild("page")));
 }
 @Override
 public void cleanUp(State defaultState, ContentProperty contentProperty, SiteMeshContext siteMeshContext) {
 }
}

用法很簡(jiǎn)單使用content作為tag默認(rèn)填上tag即可

比如

<content tag="reference">
<script type="text/javascript" src="<%=path%>/plugins/select2/js/select2.min.js"></script>
<script type="text/javascript" src="<%=path%>/plugins/select2/js/i18n/zh-CN.js"></script>
<script type="text/javascript" src="<%=path%>/plugins/bootstrap-modal/js/bootstrap-modal.js"></script>
<script type="text/javascript" src="<%=path%>/plugins/bootstrap-modal/js/bootstrap-modalmanager.js"></script>
</content>

在模板中這樣

<body class="mainBody">
<sitemesh:write property='body'/>
<sitemesh:write property='page.reference'/>
</body>

這樣就可以很簡(jiǎn)單的放入到任意位置!?。?/p>

弊端

這樣雖然很簡(jiǎn)單 但是也存在一些問(wèn)題 開發(fā)如果需要增加新的content必須要要到母版頁(yè)【對(duì)的 其實(shí)sitemesh不就像是asp.net中的母版頁(yè)么】

增加對(duì)應(yīng)的sitemesh:write標(biāo)簽

propertyToExport.getChild(tagId).setValue(tagProcessorContext.currentBufferContents());

并且上述代碼中同樣存在覆蓋的問(wèn)題 比如多處使用了同樣的tagId

解決

sitemesh似乎沒(méi)有提供直接用來(lái)拼接多個(gè)的tagRule

如果有需求將某塊元素放入到末尾 可以考慮增加tagRule

在processEnd時(shí)直接將對(duì)應(yīng)的元素直接append

最終可以直接輸出

以上就是我們給大家整理的本次教程的全部?jī)?nèi)容,感謝你對(duì)腳本之家的支持。

相關(guān)文章

最新評(píng)論

铁岭市| 金寨县| 海阳市| 龙陵县| 象山县| 弥勒县| 泗洪县| 乐至县| 抚顺县| 乌兰察布市| 宁陕县| 兴业县| 安塞县| 安泽县| 乐都县| 呼和浩特市| 渝北区| 宣威市| 彭泽县| 扶余县| 香格里拉县| 花莲县| 越西县| 珠海市| 永城市| 郧西县| 遂平县| 商都县| 象州县| 全南县| 乐至县| 石景山区| 辽宁省| 南郑县| 双鸭山市| 安溪县| 新兴县| 密山市| 汝阳县| 马鞍山市| 陆河县|