diff --git a/sitemesh/src/main/java/org/sitemesh/content/tagrules/decorate/SiteMeshWriteRule.java b/sitemesh/src/main/java/org/sitemesh/content/tagrules/decorate/SiteMeshWriteRule.java index 1434631..679f2a6 100644 --- a/sitemesh/src/main/java/org/sitemesh/content/tagrules/decorate/SiteMeshWriteRule.java +++ b/sitemesh/src/main/java/org/sitemesh/content/tagrules/decorate/SiteMeshWriteRule.java @@ -35,6 +35,7 @@ public class SiteMeshWriteRule extends BasicBlockRule { private final SiteMeshContext siteMeshContext; + private ContentProperty property; public SiteMeshWriteRule(SiteMeshContext siteMeshContext) { this.siteMeshContext = siteMeshContext; @@ -45,7 +46,7 @@ protected Object processStart(Tag tag) throws IOException { String propertyPath = tag.getAttributeValue("property", true); Content contentToMerge = siteMeshContext.getContentToMerge(); if (contentToMerge != null) { - ContentProperty property = getProperty(contentToMerge, propertyPath); + property = getProperty(contentToMerge, propertyPath); property.writeValueTo(tagProcessorContext.currentBuffer()); } tagProcessorContext.pushBuffer(); @@ -64,7 +65,7 @@ protected ContentProperty getProperty(Content content, String propertyPath) { protected void processEnd(Tag tag, Object data) throws IOException { CharSequence defaultContents = tagProcessorContext.currentBufferContents(); tagProcessorContext.popBuffer(); - if (siteMeshContext.getContentToMerge() == null) { + if (siteMeshContext.getContentToMerge() == null || !property.hasValue()) { tagProcessorContext.currentBuffer().append(defaultContents); } } diff --git a/sitemesh/src/test/java/org/sitemesh/content/tagrules/decorate/SiteMeshWriteRuleTest.java b/sitemesh/src/test/java/org/sitemesh/content/tagrules/decorate/SiteMeshWriteRuleTest.java index f7c3b47..10bd9ec 100644 --- a/sitemesh/src/test/java/org/sitemesh/content/tagrules/decorate/SiteMeshWriteRuleTest.java +++ b/sitemesh/src/test/java/org/sitemesh/content/tagrules/decorate/SiteMeshWriteRuleTest.java @@ -57,8 +57,8 @@ public void testRemovesTagBodyIfContentSupplied() throws IOException { SiteMeshContextStub context = new SiteMeshContextStub(); context.setContentToMerge(content); - String in = "Hello X" + - " X!"; + String in = "Hello " + + " !"; TagProcessor tagProcessor = new TagProcessor(CharBuffer.wrap(in)); tagProcessor.addRule("sitemesh:write", new SiteMeshWriteRule(context)); tagProcessor.process(); @@ -81,20 +81,20 @@ public void testLeavesTagBodyIfContentMissing() throws IOException { assertEquals("Hello X X!", out.toString()); } - public void testSkipsMissingProperties() throws IOException { + public void testLeavesTagBodyForMissingProperties() throws IOException { Content content = new InMemoryContent(); SiteMeshContextStub context = new SiteMeshContextStub(); content.getExtractedProperties().getChild("found").setValue("FOUND"); context.setContentToMerge(content); String in = "Hello BAD" + - " BAD!"; + " GOOD!"; TagProcessor tagProcessor = new TagProcessor(CharBuffer.wrap(in)); tagProcessor.addRule("sitemesh:write", new SiteMeshWriteRule(context)); tagProcessor.process(); CharSequence out = tagProcessor.getDefaultBufferContents(); - assertEquals("Hello FOUND !", out.toString()); + assertEquals("Hello FOUND GOOD!", out.toString()); } public void testWritesBodyAttributesSimple() throws IOException {