加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 资讯 > 正文

java ee的sitemesh如何修改tagRule?

发布时间:2024-01-05 15:48:34 所属栏目:资讯 来源:互联网
导读:  天这篇我们来学习和了解“java ee的sitemesh如何修改tagRule?”,下文的讲解详细,步骤过程清晰,对大家进一步学习和理解“java ee的sitemesh如何修改tagRule?”有一定的帮助。有这方面学习

  天这篇我们来学习和了解“java ee的sitemesh如何修改tagRule?”,下文的讲解详细,步骤过程清晰,对大家进一步学习和理解“java ee的sitemesh如何修改tagRule?”有一定的帮助。有这方面学习需要的朋友就继续往下看吧!

  sitemesh默认提供了一些常用的rule

  可以看到其实可以选择

  /**

  * Extracts the contents of any elements that look like

  * ... and write the contents

  * to a page property (page.foo).

  *

  *

This is a cheap and cheerful mechanism for embedding multiple components in a

  * page that can be used in different places in decorators.

  *

  * @author Joe Walnes

  */

  public class ContentBlockExtractingRule extends BasicBlockRule {

  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) {

  }

  }

  用法很简单使用content作为tag默认填上tag即可

  比如

  

  

  

  

  

  

  在模板中这样

  

 

  

  

  

  这样就可以很简单的放入到任意位置!!!

  弊端

  这样虽然很简单 但是也存在一些问题 开发如果需要增加新的content必须要要到母版页【对的 其实sitemesh不就像是asp.net中的母版页么】

  增加对应的sitemesh:write标签

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

  并且上述代码中同样存在覆盖的问题 比如多处使用了同样的tagId

  解决

  sitemesh似乎没有提供直接用来拼接多个的tagRule

  如果有需求将某块元素放入到末尾 可以考虑增加tagRule

  在processEnd时直接将对应的元素直接append

  最终可以直接输出

  关于“java ee的sitemesh如何修改tagRule?”的内容今天就到这,感谢各位的阅读,大家可以动手实际看看,对大家加深理解更有帮助哦。如果想了解更多相关内容的文章,关注我们,

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章