You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by ff...@apache.org on 2014/02/14 15:39:12 UTC
git commit: TAP5-2223 : New "secure" flag in Select component has a
bug when using option groups
Updated Branches:
refs/heads/master 76982d56f -> 32e8e2f62
TAP5-2223 : New "secure" flag in Select component has a bug when using option groups
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/32e8e2f6
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/32e8e2f6
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/32e8e2f6
Branch: refs/heads/master
Commit: 32e8e2f626f9da1d64e13bbd7e572a33dd9cab22
Parents: 76982d5
Author: ffacon <ff...@apache.org>
Authored: Fri Feb 14 15:32:48 2014 +0100
Committer: ffacon <ff...@apache.org>
Committed: Fri Feb 14 15:32:48 2014 +0100
----------------------------------------------------------------------
.../tapestry5/corelib/components/Select.java | 2 +-
tapestry-core/src/test/app1/OptionGroupForm.tml | 17 ++++
.../tapestry5/integration/app1/data/Entity.java | 51 +++++++++++
.../tapestry5/integration/app1/pages/Index.java | 2 +
.../integration/app1/pages/OptionGroupForm.java | 92 ++++++++++++++++++++
.../integration/app1/services/AppModule.java | 23 +++++
6 files changed, 186 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/32e8e2f6/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 df55fcb..031d892 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
@@ -294,7 +294,7 @@ public class Select extends AbstractField
{
for (OptionGroupModel og : model.getOptionGroups())
{
- if (findInOptions(og.getOptions(), submittedValue))
+ if (findInOptions(og.getOptions(), asSubmitted))
{
return asSubmitted;
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/32e8e2f6/tapestry-core/src/test/app1/OptionGroupForm.tml
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/app1/OptionGroupForm.tml b/tapestry-core/src/test/app1/OptionGroupForm.tml
new file mode 100644
index 0000000..2722161
--- /dev/null
+++ b/tapestry-core/src/test/app1/OptionGroupForm.tml
@@ -0,0 +1,17 @@
+<html t:type="Border" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
+<h1>Simple Option Group </h1>
+
+ <t:form t:id="form">
+ <t:select t:id="select" t:value="entity" t:model="model"/>
+ <t:submit />
+ </t:form>
+
+<p>Entered data:</p>
+
+<ul>
+ <li>entity.id: [${entity.id}]</li>
+ <li>entity.label: [${entity.label}]</li>
+</ul>
+
+
+</html>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/32e8e2f6/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/data/Entity.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/data/Entity.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/data/Entity.java
new file mode 100644
index 0000000..40c2bdc
--- /dev/null
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/data/Entity.java
@@ -0,0 +1,51 @@
+// Copyright 2014 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.tapestry5.integration.app1.data;
+
+public class Entity {
+
+ private String id;
+ private String label;
+
+ public String getLabel() {
+ return label;
+ }
+
+ public void setLabel(String label) {
+ this.label = label;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public Entity() {
+ super();
+ }
+
+ public Entity(String id, String label) {
+ super();
+ this.id = id;
+ this.label = label;
+ }
+
+ public boolean equals(Object obj) {
+ return (obj == this) || (obj instanceof Entity) && id != null && id.equals(((Entity) obj).getId());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/32e8e2f6/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
index 4df619a..0fa9207 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
@@ -291,6 +291,8 @@ public class Index
new Item("simpleform", "SimpleForm", "first pass at writing Form and TextField components"),
+ new Item("OptionGroupForm", "OptionGroupForm", "Select with Option Group"),
+
new Item("validform", "ValidForm", "server-side input validation"),
new Item("ToDoListVolatile", "ToDo List (Volatile)", "Loops and Submit inside Form, volatile mode"),
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/32e8e2f6/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/OptionGroupForm.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/OptionGroupForm.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/OptionGroupForm.java
new file mode 100644
index 0000000..d47aac3
--- /dev/null
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/OptionGroupForm.java
@@ -0,0 +1,92 @@
+// Copyright 2014 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.tapestry5.integration.app1.pages;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.tapestry5.EventConstants;
+import org.apache.tapestry5.OptionGroupModel;
+import org.apache.tapestry5.OptionModel;
+import org.apache.tapestry5.SelectModel;
+import org.apache.tapestry5.annotations.OnEvent;
+import org.apache.tapestry5.annotations.Persist;
+import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.integration.app1.data.Entity;
+import org.apache.tapestry5.integration.app1.data.IncidentData;
+import org.apache.tapestry5.internal.OptionGroupModelImpl;
+import org.apache.tapestry5.internal.OptionModelImpl;
+import org.apache.tapestry5.util.AbstractSelectModel;
+
+
+
+public class OptionGroupForm {
+
+ @Property
+ @Persist
+ private Entity entity;
+
+ private static final List<Entity> entityList = Arrays.asList(new Entity("1", "label1"), new Entity("2", "label2"), new Entity("3", "label3"));
+
+ void onPrepare()
+ {
+ if (entity == null)
+ {
+ entity = new Entity();
+ entity.setId("1");
+ entity.setLabel("label1");
+ }
+ }
+
+ @OnEvent(value = EventConstants.SUCCESS, component = "form")
+ public void onFormSuccess() {
+ // It's OK we should come here on form submission
+ }
+
+ @OnEvent(value = EventConstants.FAILURE, component = "form")
+ public void onFormFailure() throws Exception {
+ throw new Exception("The form should have been successfully submitted");
+ }
+
+ public SelectModel getModel() {
+ return new AbstractSelectModel() {
+
+ private List<OptionGroupModel> groupModels = null;
+
+ public List<OptionModel> getOptions() {
+ return null;
+ }
+
+ public List<OptionGroupModel> getOptionGroups() {
+ if (groupModels == null) {
+ computeModel();
+ }
+ return groupModels;
+ }
+
+ private void computeModel() {
+ groupModels = new ArrayList<OptionGroupModel>();
+ for (Entity entity : entityList) {
+ List<OptionModel> options = new ArrayList<OptionModel>();
+ options.add(new OptionModelImpl(entity.getLabel(), entity));
+
+ OptionGroupModel groupModel = new OptionGroupModelImpl(entity.getLabel(), false, options);
+ groupModels.add(groupModel);
+ }
+
+ }
+ };
+ }
+}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/32e8e2f6/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
index d1849fe..a6cfe30 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
@@ -16,6 +16,7 @@ package org.apache.tapestry5.integration.app1.services;
import org.apache.tapestry5.SymbolConstants;
import org.apache.tapestry5.ValueEncoder;
+import org.apache.tapestry5.integration.app1.data.Entity;
import org.apache.tapestry5.integration.app1.data.ToDoItem;
import org.apache.tapestry5.integration.app1.data.Track;
import org.apache.tapestry5.internal.services.GenericValueEncoderFactory;
@@ -270,6 +271,28 @@ public class AppModule
};
configuration.add(ToDoItem.class, GenericValueEncoderFactory.create(todoEncoder));
+
+ final ValueEncoder<Entity> encoder = new ValueEncoder<Entity>() {
+ public String toClient(Entity value) {
+ return value.getId();
+ }
+
+ public Entity toValue(String clientValue) {
+ Entity entity = new Entity();
+ entity.setId(clientValue);
+ entity.setLabel("label" + clientValue);
+ return entity;
+ }
+ };
+
+ ValueEncoderFactory<Entity> valueEncoderFactory = new ValueEncoderFactory<Entity>() {
+
+ public ValueEncoder<Entity> create(Class<Entity> type) {
+ return encoder;
+ }
+ };
+
+ configuration.add(Entity.class, valueEncoderFactory);
}
public static void contributeComponentClassTransformWorker(