You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2020/04/08 08:14:02 UTC

[wicket] branch master updated: WICKET-6763 simplify markup

This is an automated email from the ASF dual-hosted git repository.

svenmeier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git


The following commit(s) were added to refs/heads/master by this push:
     new c49b3a5  WICKET-6763 simplify markup
c49b3a5 is described below

commit c49b3a5a7ab422f7dc1584da12665cd90ea4d985
Author: Sven Meier <sv...@apache.org>
AuthorDate: Wed Apr 1 22:04:29 2020 +0200

    WICKET-6763 simplify markup
    
    support older markup with log warning
---
 .../apache/wicket/examples/compref/SelectPage.html |  6 +-
 .../apache/wicket/examples/compref/SelectPage.java | 10 +--
 .../markup/html/form/select/SelectOptions.java     | 73 ++++++++++++++++------
 .../markup/html/form/select/SelectTestPage3.html   |  4 +-
 4 files changed, 59 insertions(+), 34 deletions(-)

diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/compref/SelectPage.html b/wicket-examples/src/main/java/org/apache/wicket/examples/compref/SelectPage.html
index c44468d..480c3ff 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/compref/SelectPage.html
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/compref/SelectPage.html
@@ -35,8 +35,10 @@
 		  <td valign="top">Select some of these excellent choices</td>
 		  <td>
 		    <select wicket:id="choices" multiple="multiple" size="5">
-				<!-- the only trick here is that the wicket id of the option tag is fixed to "option" -->
-		        <span wicket:id="manychoices"><option wicket:id="option"></option></span>
+		        <option wicket:id="manychoices"></option>
+				<!-- the pre Wicket 9 solution required a nested option tag with a fixed "option" id
+			        <span wicket:id="manychoices"><option wicket:id="option"></option></span>
+				-->
 		    </select>
 		  </td>
 		 </tr>
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/compref/SelectPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/compref/SelectPage.java
index 1b7ecdd..edc4c3c 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/compref/SelectPage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/compref/SelectPage.java
@@ -18,7 +18,6 @@ package org.apache.wicket.examples.compref;
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 
@@ -32,7 +31,6 @@ import org.apache.wicket.markup.html.panel.FeedbackPanel;
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
-import org.apache.wicket.model.util.CollectionModel;
 import org.apache.wicket.util.io.IClusterable;
 
 
@@ -44,10 +42,6 @@ import org.apache.wicket.util.io.IClusterable;
  */
 public class SelectPage extends WicketExamplePage
 {
-	/** available sites for selection. */
-	private static final List<String> SITES = Arrays.asList("The Server Side", "Java Lobby",
-		"Java.Net");
-
 	/** available choices for large selection box. */
 	private static final List<String> MANY_CHOICES = Arrays.asList("Choice1", "Choice2",
 		"Choice3", "Choice4", "Choice5", "Choice6", "Choice7", "Choice8", "Choice9");
@@ -103,9 +97,7 @@ public class SelectPage extends WicketExamplePage
 			}
 
 		};
-		IModel<Collection<String>> model = new CollectionModel<>(
-			MANY_CHOICES);
-		choices.add(new SelectOptions<>("manychoices", model, renderer));
+		choices.add(new SelectOptions<>("manychoices", () -> MANY_CHOICES, renderer));
 
 	}
 
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/select/SelectOptions.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/select/SelectOptions.java
index fd6d1f6..18d08c1 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/select/SelectOptions.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/select/SelectOptions.java
@@ -26,13 +26,18 @@ import org.apache.wicket.markup.repeater.RepeatingView;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.util.CollectionModel;
 import org.apache.wicket.util.string.Strings;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 
 /**
- * Component that makes it easy to produce a list of SelectOption components
- * 
- * Example markup:
- * 
+ * Component that makes it easy to produce a list of SelectOption components.
+ * <p>
+ * Has to be attached to a &lt;option&gt; markup tag.
+ * <p>
+ * Note: The following pre Wicket 9 markup is deprecated and results in a log warning. Its support
+ * will be removed in Wicket 10:
+ *
  * <pre>
  * <code>
  * &lt;wicket:container wicket:id=&quot;selectOptions&quot;&gt;&lt;option wicket:id=&quot;option&quot;&gt;&lt;/option&gt;&lt;/wicket:container&gt;
@@ -47,6 +52,8 @@ public class SelectOptions<T> extends RepeatingView
 {
 	private static final long serialVersionUID = 1L;
 
+	private static final Logger log = LoggerFactory.getLogger(SelectOptions.class);
+
 	private boolean recreateChoices = false;
 
 	private final IOptionRenderer<T> renderer;
@@ -83,9 +90,9 @@ public class SelectOptions<T> extends RepeatingView
 	 * Controls whether {@link SelectOption}s are recreated on each render.
 	 * <p>
 	 * Note: When recreating on each render, {@link #newOption(String, IModel)} should return
-	 * {@link SelectOption}s with stable values, i.e. {@link SelectOption#getValue()} should
-	 * return a value based on its model object instead of the default auto index.
-	 * Otherwise the current selection will be lost on form errors.
+	 * {@link SelectOption}s with stable values, i.e. {@link SelectOption#getValue()} should return
+	 * a value based on its model object instead of the default auto index. Otherwise the current
+	 * selection will be lost on form errors.
 	 * 
 	 * @param refresh
 	 * @return this for chaining
@@ -111,36 +118,61 @@ public class SelectOptions<T> extends RepeatingView
 			removeAll();
 
 			Collection<? extends T> modelObject = (Collection<? extends T>)getDefaultModelObject();
-
 			if (modelObject != null)
 			{
-				for (T value : modelObject)
+				// TODO remove in Wicket 10
+				boolean option = "option".equalsIgnoreCase(getMarkupTag().getName());
+				if (option == false)
 				{
-					// we need a container to represent a row in repeater
-					WebMarkupContainer row = new WebMarkupContainer(newChildId());
-					row.setRenderBodyOnly(true);
-					add(row);
+					log.warn("Since version 9.0.0 you should use an option tag");
+				}
 
+				for (T value : modelObject)
+				{
 					// we add our actual SelectOption component to the row
 					String text = renderer.getDisplayValue(value);
 					IModel<T> model = renderer.getModel(value);
-					row.add(newOption(text, model));
+
+					if (option)
+					{
+						add(newOption(newChildId(), text, model));
+					}
+					else
+					{
+						// pre Wicket 9 a container is used to represent a row in repeater
+						WebMarkupContainer row = new WebMarkupContainer(newChildId());
+						row.setRenderBodyOnly(true);
+						add(row);
+
+						// we add our actual SelectOption component to the row
+						row.add(newOption(text, model));
+					}
 				}
 			}
 		}
 	}
 
 	/**
+	 * @deprecated override {@link #newOption(String, String, IModel)} instead.
+	 */
+	protected SelectOption<T> newOption(final String text, final IModel<T> model)
+	{
+		return newOption("option",  text, model);
+	}
+
+	/**
 	 * Factory method for creating a new <code>SelectOption</code>. Override to add your own
 	 * extensions, such as Ajax behaviors.
 	 * 
+	 * @param id
+	 *            component id
 	 * @param text
 	 * @param model
 	 * @return a {@link SelectOption}
 	 */
-	protected SelectOption<T> newOption(final String text, final IModel<T> model)
+	protected SelectOption<T> newOption(final String id, final String text, final IModel<T> model)
 	{
-		SimpleSelectOption<T> option = new SimpleSelectOption<>("option", model, text);
+		SimpleSelectOption<T> option = new SimpleSelectOption<>(id, model, text);
 		option.setEscapeModelStrings(this.getEscapeModelStrings());
 		return option;
 	}
@@ -173,10 +205,11 @@ public class SelectOptions<T> extends RepeatingView
 		public void onComponentTagBody(final MarkupStream markupStream, final ComponentTag openTag)
 		{
 			CharSequence escaped = text;
-			if (getEscapeModelStrings()) {
+			if (getEscapeModelStrings())
+			{
 				escaped = Strings.escapeMarkup(text);
 			}
-			
+
 			replaceComponentTagBody(markupStream, openTag, escaped);
 		}
 
@@ -193,12 +226,12 @@ public class SelectOptions<T> extends RepeatingView
 			tag.setType(TagType.OPEN);
 		}
 	}
-	
+
 	@Override
 	protected void onDetach()
 	{
 		renderer.detach();
-		
+
 		super.onDetach();
 	}
 }
diff --git a/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/select/SelectTestPage3.html b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/select/SelectTestPage3.html
index 068bba2..6aafa6c 100644
--- a/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/select/SelectTestPage3.html
+++ b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/select/SelectTestPage3.html
@@ -3,9 +3,7 @@
 <body>
 	<form wicket:id="form">
 		<select wicket:id="select">
-			<div wicket:id="options">
-				<option wicket:id="option"></option>
-			</div>
+			<option wicket:id="options"></option>
 		</select>
 	</form>
 </body>