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 {