[ https://issues.apache.org/jira/browse/TAP5-599?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Thiago H. de Paula Figueiredo closed TAP5-599. ---------------------------------------------- Resolution: Invalid This is expected behaviour, as Tapestry uses getters and setters to access expression values. During a form submission, the expression request.testContainer.testValue is set using getRequest().getTestContainer().setTestValue(String s). Please post your doubts in the mailing list, so most people can help (and they usually do). ;) > Copying/Cloning a field in the get mutator of a persisted object produces > unexpected results on Tapestry page. > -------------------------------------------------------------------------------------------------------------- > > Key: TAP5-599 > URL: https://issues.apache.org/jira/browse/TAP5-599 > Project: Tapestry 5 > Issue Type: Question > Components: documentation, tapestry-core > Affects Versions: 5.0.18 > Reporter: Michael Fitzurka > Priority: Minor > > I am new to Tapestry (awesome BTW!) and not sure if this is a bug / > misunderstanding / RTFM moment / or just an FYI. > But this tripped me up for awhile and makes perfect sense when I tracked it > down. > If you copy or clone a object field in the get mutator to protect from > unexpected mutations (which is "a good thing"), it affects Tapestry. > Given the code and page below; the page will display but seemingly "ignore" > the entered value (See comments in code). > It makes sense, but not cloning the object field opens the code up to other > unintended / non-beneficial mutations. > Perhaps all that is needed is to document this, or I should RTFM if it > already is ;-) > Thanks - again awesome product! > =============== > public class TestContainer > { > private String testValue; > public TestContainer() { super(); } > public TestContainer(String _testValue) { setTestValue(_testValue); } > public TestContainer(TestContainer _container) { > this(_container.getTestValue()); } > public String getTestValue() { return testValue; } > public void setTestValue(String _testValue) { testValue = _testValue; } > @Override public String toString() { > return "TestContainer.testValue = '" + testValue + '\''; > } > } > =============== > public class TestWrapper > { > private TestContainer testContainer; > public TestWrapper() { super(); } > public TestWrapper(TestContainer _testContainer) { > setTestContainer(_testContainer); } > public TestWrapper(TestWrapper _testWrapper) { > this(_testWrapper.getTestContainer()); } > public TestContainer getTestContainer() { > // This works as expected. > //return testContainer; > // "Cloning/Copying" causes unforseen issues. > return testContainer == null ? null : new > TestContainer(testContainer); > } > public void setTestContainer(TestContainer _testContainer) { > // "Cloning/Copying" here doesn't matter. > testContainer = _testContainer == null ? null : new > TestContainer(_testContainer); > } > @Override public String toString() { > return "TestWrapper.testContainer = " + testContainer; > } > } > =============== > import org.apache.tapestry5.annotations.Persist; > import org.apache.tapestry5.annotations.Property; > import org.apache.tapestry5.annotations.Component; > import org.apache.tapestry5.corelib.components.Form; > public class TestWrapperPage > { > @Component private Form form; > @Property @Persist private TestWrapper request; > @Persist @Property private String response; > public TestWrapperPage() { super(); } > void onActivate() { > if (request == null) > request = new TestWrapper(new TestContainer("init")); > } > void onSelectedFromSendRequest() { > response = "TestWrapperPage.testWrapper = " + request.toString(); > } > } > =============== > <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> > <head> > <title>Test Wrapper Page</title> > </head> > <body> > <form t:id="form"> > <t:errors /> > <input type="text" t:type="TextField" t:id="request" > t:value="request.testContainer.testValue" /><br /> > <input type="submit" t:type="submit" t:id="sendRequest" value="Send > Request" /><br /> > <textarea cols="80" rows="10" readonly="true" t:type="TextArea" > t:id="response"> > </textarea> > </form> > </body> > </html> -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.