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即可
比如