Updated Branches: refs/heads/master 24018e53f -> 8e66613d3
WICKET-4629 AbstractLink does not call getBody to get its body Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/8e66613d Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/8e66613d Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/8e66613d Branch: refs/heads/master Commit: 8e66613d368dc74224aee93774c49f1a07fcbee7 Parents: 24018e5 Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Tue Jun 26 11:28:00 2012 +0300 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Tue Jun 26 11:28:00 2012 +0300 ---------------------------------------------------------------------- .../wicket/markup/html/link/AbstractLink.java | 7 ++- .../wicket/markup/html/link/AbstractLinkTest.java | 34 +++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/8e66613d/wicket-core/src/main/java/org/apache/wicket/markup/html/link/AbstractLink.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/link/AbstractLink.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/link/AbstractLink.java index 62ac136..86c2c89 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/link/AbstractLink.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/link/AbstractLink.java @@ -170,10 +170,13 @@ public abstract class AbstractLink extends WebMarkupContainer getResponse().write(getBeforeDisabledLink()); } - if ((bodyModel != null) && (bodyModel.getObject() != null)) + // Get a copy of the body model from the getBody() method. This method could be overridden. + IModel<?> tmpBodyModel = getBody(); + + if ((tmpBodyModel != null) && (tmpBodyModel.getObject() != null)) { replaceComponentTagBody(markupStream, openTag, - getDefaultModelObjectAsString(bodyModel.getObject())); + getDefaultModelObjectAsString(tmpBodyModel.getObject())); } else { http://git-wip-us.apache.org/repos/asf/wicket/blob/8e66613d/wicket-core/src/test/java/org/apache/wicket/markup/html/link/AbstractLinkTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/link/AbstractLinkTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/link/AbstractLinkTest.java index 83ac5da..cda714f 100644 --- a/wicket-core/src/test/java/org/apache/wicket/markup/html/link/AbstractLinkTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/link/AbstractLinkTest.java @@ -16,8 +16,11 @@ */ package org.apache.wicket.markup.html.link; +import java.util.concurrent.atomic.AtomicInteger; + import org.apache.wicket.MockPageWithLink; import org.apache.wicket.WicketTestCase; +import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.util.tester.TagTester; import org.junit.Assert; @@ -51,4 +54,35 @@ public class AbstractLinkTest extends WicketTestCase Assert.assertEquals(linkBody, tagTester.getValue()); } + /** + * Tests that the {@link AbstractLink} uses the {@link AbstractLink#getBody()} to get its body. This + * method can be overridden to provide a dynamic model. + */ + @Test + public void testRenderUsingGetBody() + { + final AtomicInteger counter = new AtomicInteger(0); + + MockPageWithLink mockPageWithLink = new MockPageWithLink(); + AbstractLink link = new AbstractLink("link") + { + private static final long serialVersionUID = 1L; + + @Override + public IModel<?> getBody() + { + return Model.of(counter.getAndIncrement()); + } + }; + link.setMarkupId("link"); + mockPageWithLink.add(link); + + tester.startPage(mockPageWithLink); + TagTester tagTester = tester.getTagById("link"); + Assert.assertEquals("0", tagTester.getValue()); + + tester.startPage(mockPageWithLink); + tagTester = tester.getTagById("link"); + Assert.assertEquals("1", tagTester.getValue()); + } }
