java ee的sitemesh如何修改tagRule?
天这篇我们来学习和了解“java ee的sitemesh如何修改tagRule?”,下文的讲解详细,步骤过程清晰,对大家进一步学习和理解“java ee的sitemesh如何修改tagRule?”有一定的帮助。有这方面学习需要的朋友就继续往下看吧! sitemesh默认提供了一些常用的rule 可以看到其实可以选择 /** * Extracts the contents of any elements that look like * * 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?”的内容今天就到这,感谢各位的阅读,大家可以动手实际看看,对大家加深理解更有帮助哦。如果想了解更多相关内容的文章,关注我们, (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |