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 <option> 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>
* <wicket:container wicket:id="selectOptions"><option wicket:id="option"></option></wicket:container>
@@ -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>