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

Marcin Palka updated WICKET-2043:
---------------------------------

    Description: 
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();
        }
    }
}


  was:
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;

/**
 *
 * @author Marcin Pałka (marcin.pa...@comarch.com)
 */
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();
        }
    }
}



> 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
>            Priority: Minor
>
> 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