Author: mgrigorov
Date: Fri Aug 12 15:19:05 2011
New Revision: 1157155
URL: http://svn.apache.org/viewvc?rev=1157155&view=rev
Log:
WICKET-3929 PropertyModel/PropertyResolver breaks when using a List as the root
object
Added:
wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/model/PropertyModelWithListTest.java
Modified:
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java
Modified:
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java
URL:
http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java?rev=1157155&r1=1157154&r2=1157155&view=diff
==============================================================================
---
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java
(original)
+++
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java
Fri Aug 12 15:19:05 2011
@@ -257,6 +257,13 @@ public final class PropertyResolver
{
String expressionBracketsSeperated =
Strings.replaceAll(expression, "[", ".[").toString();
int index = getNextDotIndex(expressionBracketsSeperated, 0);
+ while (index == 0 &&
expressionBracketsSeperated.startsWith("."))
+ {
+ // eat dots at the beginning of the expression since
they will confuse
+ // later steps
+ expressionBracketsSeperated =
expressionBracketsSeperated.substring(1);
+ index = getNextDotIndex(expressionBracketsSeperated, 0);
+ }
int lastIndex = 0;
Object value = object;
String exp = expressionBracketsSeperated;
Added:
wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/model/PropertyModelWithListTest.java
URL:
http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/model/PropertyModelWithListTest.java?rev=1157155&view=auto
==============================================================================
---
wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/model/PropertyModelWithListTest.java
(added)
+++
wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/model/PropertyModelWithListTest.java
Fri Aug 12 15:19:05 2011
@@ -0,0 +1,123 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.wicket.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * https://issues.apache.org/jira/browse/WICKET-3929
+ *
+ * @author Carl-Eric Menzel
+ */
+public class PropertyModelWithListTest extends Assert
+{
+ /** */
+ public static class BeansContainer
+ {
+ private List<Bean> beans = new ArrayList<Bean>();
+
+ /**
+ * @return the beans
+ *
+ */
+ public List<Bean> getBeans()
+ {
+ return beans;
+ }
+
+ /**
+ * @param beans
+ * the bean
+ */
+ public void setBeans(List<Bean> beans)
+ {
+ this.beans = beans;
+ }
+ }
+
+ /** */
+ public static class Bean
+ {
+ private String text;
+
+ /**
+ * @return the bean's text
+ */
+ public String getText()
+ {
+ return text;
+ }
+
+ /**
+ * @param text
+ * the bean's text
+ */
+ public void setText(String text)
+ {
+ this.text = text;
+ }
+ }
+
+ /**
+ *
+ * @throws Exception
+ */
+ @Test
+ public void listPropertyModel() throws Exception
+ {
+ List<Bean> beans = new
ArrayList<PropertyModelWithListTest.Bean>();
+ Bean bean = new Bean();
+ bean.setText("Wrinkly and green I am.");
+ beans.add(bean);
+ PropertyModel<String> model = new PropertyModel<String>(beans,
"0.text");
+ assertEquals("Wrinkly and green I am.", model.getObject());
+ }
+
+ /**
+ * @throws Exception
+ */
+ @Test
+ public void containerPropertyModel() throws Exception
+ {
+ BeansContainer container = new BeansContainer();
+ Bean bean = new Bean();
+ bean.setText("Wrinkly and green I am.");
+ container.getBeans().add(bean);
+ PropertyModel<String> model = new
PropertyModel<String>(container, "beans[0].text");
+ assertEquals("Wrinkly and green I am.", model.getObject());
+ }
+
+ /**
+ * @throws Exception
+ */
+ @Test
+ public void nestedListPropertyModel() throws Exception
+ {
+ List<List<Bean>> outer = new ArrayList<List<Bean>>();
+ List<Bean> inner = new ArrayList<Bean>();
+ outer.add(inner);
+ Bean bean = new Bean();
+ bean.setText("Wrinkly and green I am.");
+ inner.add(bean);
+ PropertyModel<String> model = new PropertyModel<String>(outer,
"0[0].text");
+ assertEquals("Wrinkly and green I am.", model.getObject());
+ }
+}
\ No newline at end of file