[ 
https://issues.apache.org/jira/browse/WICKET-2043?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Juergen Donnerstag resolved WICKET-2043.
----------------------------------------

       Resolution: Invalid
    Fix Version/s: 1.4-RC2
         Assignee: Juergen Donnerstag

You actually want the following two characters "\t" to appear in the html 
markup. You don't want ASCII code 09. In order for that to happen you need to 
escape it in Java. Once you changed "\t" to "\\t" it'll work. 

> Tab (\t) character in a DropDownChoice value causes the returned selected 
> value to be null
> ------------------------------------------------------------------------------------------
>
>                 Key: WICKET-2043
>                 URL: https://issues.apache.org/jira/browse/WICKET-2043
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 1.4-RC1
>         Environment: Window Vista 64-bit,  javac 1.6.0_10,  BEA weblogic 10.3
>            Reporter: Marcin Palka
>            Assignee: Juergen Donnerstag
>            Priority: Minor
>             Fix For: 1.4-RC2
>
>         Attachments: BuggyPage.zip
>
>
> I use a DropDownChoice with a model of SelectOption objects and a 
> ChoiceRenderer (see code below).
> This is how I create a DropDownChoice instance:
> DropDownChoice separatorDropDown = new DropDownChoice(
>                 "separatorDropDown",
>                 new PropertyModel(this, "separator"), //separator is a field 
> in my class
>                 new Model(new ArrayList(Arrays.asList(separators))), 
> //separators is an array of SelectOption objects
>                 choiceRenderer);
> This is how the SelectOption looks like:
> class SelectOption implements Serializable {
>         private String key;
>         private String value;
>         public SelectOption(String key, String value) {
>             this.key = key;
>             this.value = value;
>         }
>         public String getKey() {
>             return key;
>         }
>         public void setKey(String key) {
>             this.key = key;
>         }
>         public String getValue() {
>             return value;
>         }
>         public void setValue(String value) {
>             this.value = value;
>         }
>         @Override
>         public String toString() {
>             return getKey();
>         }
>     }
> And this is how choiceRenderer looks like
> ChoiceRenderer choiceRenderer = new ChoiceRenderer("key", "value");
> These are the values that my model consist of:
> private SelectOption[] separators = new SelectOption[]{
>         new SelectOption("comma", ","),
>         new SelectOption("semicolon ", ";"),
>         new SelectOption("dot", "."),
>         new SelectOption("tab", "\t"), //causes null
>         new SelectOption("tabandtex", "\ttext"), //causes null
>         new SelectOption("space", " ")};
> Whenever any item containing a \t (tab character) in its value field is 
> selected, the separator field that PropertyModel points to becomes null. 
> Otherwise correct SelectOption instance is being set into separator.
> I noticed that tab characters are missing from the output markup generated by 
> wicket.
> <select wicket:id="separatorDropDown" ...>
> <option selected="selected" value=",">comma</option>
> <option value=";">semicolon </option>
> <option value=".">dot</option>
> <option value="       ">tab</option>
> <option value="       text">tabandtex</option>
> <option value=" ">space</option>
> </select>
> This is complete code:
> Markup part:
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
> <html xmlns:wicket>
>     <head>
>         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
>         <title>BuggyPage</title>
>     </head>
>     <body>
>         <div>
>             Separator &nbsp;&nbsp;<select 
> wicket:id="separatorDropDown">Separator</select>
>         </div>
>         <div wicket:id="separatorLabel">separatorLabel</div>
>     </body>
> </html>
> and Java code:
> import java.io.Serializable;
> import java.util.ArrayList;
> import java.util.Arrays;
> import org.apache.wicket.PageParameters;
> import org.apache.wicket.ajax.AjaxRequestTarget;
> import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
> import org.apache.wicket.markup.html.WebPage;
> import org.apache.wicket.markup.html.basic.Label;
> import org.apache.wicket.markup.html.form.ChoiceRenderer;
> import org.apache.wicket.markup.html.form.DropDownChoice;
> import org.apache.wicket.model.Model;
> import org.apache.wicket.model.PropertyModel;
> public final class BuggyPage extends WebPage {
>     //default separator
>     private SelectOption defaultSeparator = new SelectOption("comma", ",");
>     //current separator
>     private SelectOption separator = defaultSeparator;
>     //separators
>     private SelectOption[] separators = new SelectOption[]{
>         new SelectOption("comma", ","),
>         new SelectOption("semicolon ", ";"),
>         new SelectOption("dot", "."),
>         new SelectOption("tab", "\t"), //causes null
>         new SelectOption("tabandtex", "\ttext"), //causes null
>         new SelectOption("space", " ")};
>     Label separatorLabel = new Label("separatorLabel", "Separator is " + 
> separator);
>     public BuggyPage(PageParameters params) {
>         separatorLabel.setOutputMarkupId(true);
>         ChoiceRenderer choiceRenderer = new ChoiceRenderer("key", "value");
>         DropDownChoice separatorDropDown = new DropDownChoice(
>                 "separatorDropDown",
>                 new PropertyModel(this, "separator"),
>                 new Model(new ArrayList(Arrays.asList(separators))),
>                 choiceRenderer);
>         // Enable Ajax-based choice
>         separatorDropDown.add(new 
> AjaxFormComponentUpdatingBehavior("onchange") {
>             @Override
>             protected void onUpdate(AjaxRequestTarget target) {
>                 //whenever the \t or \tsomething is selected,
>                 //the separator instance is null here. 
>                 //This applies to any value that contains a backslash
>                 String separatorLabelText = "New separator is " + separator;
>                 Label newLabel = new Label("separatorLabel", 
> separatorLabelText);
>                 newLabel.setOutputMarkupId(true);
>                 separatorLabel.replaceWith(newLabel);
>                 separatorLabel = newLabel;
>                 target.addComponent(newLabel);
>             }
>         });
>         add(separatorDropDown);
>         add(separatorLabel);
>     }
>     class SelectOption implements Serializable {
>         private String key;
>         private String value;
>         public SelectOption(String key, String value) {
>             this.key = key;
>             this.value = value;
>         }
>         /**
>          * @return the key
>          */
>         public String getKey() {
>             return key;
>         }
>         /**
>          * @param key the key to set
>          */
>         public void setKey(String key) {
>             this.key = key;
>         }
>         /**
>          * @return the value
>          */
>         public String getValue() {
>             return value;
>         }
>         /**
>          * @param value the value to set
>          */
>         public void setValue(String value) {
>             this.value = value;
>         }
>         @Override
>         public String toString() {
>             return getKey();
>         }
>     }
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to