You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by jk...@apache.org on 2015/11/05 16:21:53 UTC
tapestry-5 git commit: TAP5-2490: the context values are encoded
using the encoder, so we also need to use it to decode them
Repository: tapestry-5
Updated Branches:
refs/heads/master 18ea65471 -> b72b0e100
TAP5-2490: the context values are encoded using the encoder, so we also need to use it to decode them
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/b72b0e10
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/b72b0e10
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/b72b0e10
Branch: refs/heads/master
Commit: b72b0e100e72c482294f418919f6f4aa7f57c6d3
Parents: 18ea654
Author: Jochen Kemnade <jo...@eddyson.de>
Authored: Thu Nov 5 16:06:47 2015 +0100
Committer: Jochen Kemnade <jo...@eddyson.de>
Committed: Thu Nov 5 16:06:47 2015 +0100
----------------------------------------------------------------------
.../tapestry5/corelib/components/Select.java | 7 +-
tapestry-core/src/test/app1/SelectDemo.tml | 17 +++-
.../tapestry5/integration/app1/FormTests.java | 12 +++
.../integration/app1/pages/SelectDemo.java | 89 ++++++++++++++++++++
4 files changed, 121 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/b72b0e10/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.java
index 3f5a7f4..993c3a8 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.java
@@ -20,6 +20,7 @@ import org.apache.tapestry5.corelib.data.SecureOption;
import org.apache.tapestry5.corelib.mixins.RenderDisabled;
import org.apache.tapestry5.internal.InternalComponentResources;
import org.apache.tapestry5.internal.TapestryInternalUtils;
+import org.apache.tapestry5.internal.services.ArrayEventContext;
import org.apache.tapestry5.internal.util.CaptureResultCallback;
import org.apache.tapestry5.internal.util.SelectModelRenderer;
import org.apache.tapestry5.ioc.Messages;
@@ -263,7 +264,7 @@ public class Select extends AbstractField
}
}
- Object onChange(final List<Object> context,
+ Object onChange(final EventContext context,
@RequestParameter(value = "t:selectvalue", allowBlank = true) final String selectValue)
throws ValidationException
{
@@ -271,11 +272,11 @@ public class Select extends AbstractField
CaptureResultCallback<Object> callback = new CaptureResultCallback<Object>();
- Object[] newContext = new Object[context.size() + 1];
+ Object[] newContext = new Object[context.getCount() + 1];
newContext[0] = newValue;
for (int i = 1; i < newContext.length; i++)
{
- newContext[i] = context.get(i - 1);
+ newContext[i] = encoder.toValue(context.get(String.class, i - 1));
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/b72b0e10/tapestry-core/src/test/app1/SelectDemo.tml
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/app1/SelectDemo.tml b/tapestry-core/src/test/app1/SelectDemo.tml
index 60a27d4..9e528a0 100644
--- a/tapestry-core/src/test/app1/SelectDemo.tml
+++ b/tapestry-core/src/test/app1/SelectDemo.tml
@@ -8,7 +8,6 @@
:
<t:select t:id="color" validate="required" blankOption="always"
model="literal:Red,Green,Blue" />
-
</p>
<p>
<t:label for="month" />
@@ -24,5 +23,21 @@
<p> Selected color: ${color}</p>
<p> Selected month: ${month}</p>
+
+ <t:zone>
+ <t:form>
+
+ <p>
+ <t:label for="number" />
+ :
+ <t:select t:id="number" zone="^"
+ model="numbermodel" context="numbercontext" encoder="numberencoder" />
+ </p>
+
+ </t:form>
+
+ <p> Selected number: ${number}</p>
+ <p> Selected number context: ${selectedNumberContext}</p>
+ </t:zone>
</t:border>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/b72b0e10/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/FormTests.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/FormTests.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/FormTests.java
index 85a3690..553342d 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/FormTests.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/FormTests.java
@@ -1264,4 +1264,16 @@ public class FormTests extends App1TestCase
assertTextPresent("Selected month: August");
}
+
+ @Test
+ // TAP5-2490
+ public void select_with_url_encoded_context() throws Exception
+ {
+ openLinks("Select Demo");
+
+ select("number", "label=2");
+
+ assertTextPresent("Selected number: 2");
+ assertTextPresent("Selected number context: 23");
+ }
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/b72b0e10/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SelectDemo.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SelectDemo.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SelectDemo.java
index 00c5219..dad93f0 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SelectDemo.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SelectDemo.java
@@ -13,6 +13,8 @@
// limitations under the License.
package org.apache.tapestry5.integration.app1.pages;
+import java.util.List;
+
import org.apache.tapestry5.PersistenceConstants;
import org.apache.tapestry5.SelectModel;
import org.apache.tapestry5.annotations.Persist;
@@ -20,6 +22,15 @@ import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.internal.OptionModelImpl;
import org.apache.tapestry5.internal.SelectModelImpl;
+import org.apache.tapestry5.EventConstants;
+import org.apache.tapestry5.ValueEncoder;
+import org.apache.tapestry5.annotations.InjectComponent;
+import org.apache.tapestry5.annotations.OnEvent;
+import org.apache.tapestry5.annotations.Persist;
+import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.corelib.components.Zone;
+import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
+
public class SelectDemo
{
@@ -30,6 +41,11 @@ public class SelectDemo
@Property
@Persist
private String month;
+
+ @Property
+ @Persist
+ private NumberContainer number;
+
@Property
@Persist(PersistenceConstants.FLASH)
@@ -53,4 +69,77 @@ public class SelectDemo
);
}
+
+ @Property
+ @Persist
+ private NumberContainer selectedNumberContext;
+
+ @InjectComponent
+ private Zone zone;
+
+ public List<NumberContainer> getNumberModel(){
+ return CollectionFactory.newList(new NumberContainer(1), new NumberContainer(2));
+ }
+
+ public ValueEncoder<NumberContainer> getNumberEncoder(){
+ return new ValueEncoder<NumberContainer>() {
+
+ @Override
+ public String toClient(NumberContainer value) {
+ return Integer.toString(value.number);
+ }
+
+ @Override
+ public NumberContainer toValue(String clientValue) {
+ return new NumberContainer(Integer.parseInt(clientValue));
+ }
+ };
+ }
+
+ public NumberContainer getNumberContext(){
+ return new NumberContainer(23);
+ }
+
+ @OnEvent(value=EventConstants.VALUE_CHANGED, component="number")
+ Object onValueChangedFromNumber(NumberContainer number, NumberContainer context){
+ selectedNumberContext = context;
+ return zone.getBody();
+ }
+
+ public static final class NumberContainer {
+
+ public NumberContainer(int number) {
+ this.number = number;
+ }
+
+ public final int number;
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + number;
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ NumberContainer other = (NumberContainer) obj;
+ if (number != other.number)
+ return false;
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return Integer.toString(number);
+ }
+
+ }
}