Palette nested in a ListView results in a NPE when an error feedback is logged 
when submitting form
---------------------------------------------------------------------------------------------------

                 Key: WICKET-2852
                 URL: https://issues.apache.org/jira/browse/WICKET-2852
             Project: Wicket
          Issue Type: Bug
    Affects Versions: 1.4.7
            Reporter: Robin Shine
            Priority: Minor


Reproducing steps:
1. Put TestPage.html and TestPage.java into a wicket application, visit test 
page.
2. Hit the save button and NullPointerException will be thrown indicating the 
"ids" field of component Palette$Recorder is not initialized

If taken Palette outside of ListView, the code will work fine. 

TestPage.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml";>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        </head>
        <body>
                <form wicket:id="form">
                        <div wicket:id="palettes">
                                <div wicket:id="palette"></div>
                        </div>
                        <input type="submit" value="save"></input>
                </form>
                <div wicket:id="feedback"></div>
        </body>
</html>

TestPage.java:

import java.util.ArrayList;
import java.util.List;

import org.apache.wicket.extensions.markup.html.form.palette.Palette;
import org.apache.wicket.feedback.ContainerFeedbackMessageFilter;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.IChoiceRenderer;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;

public class TestPage extends WebPage {
        
        @SuppressWarnings({ "unchecked", "serial" })
        public TestPage() {
                Form form = new Form("form") {

                        @Override
                        protected void onSubmit() {
                                error("Please select a value.");
                        }
                        
                };
                add(form);
                
                List<String> list = new ArrayList<String>();
                list.add("1");
                
                form.add(new ListView("palettes", list) {

                        @Override
                        protected void populateItem(ListItem item) {
                            IChoiceRenderer renderer = new IChoiceRenderer() {

                                        public Object getDisplayValue(Object 
object) {
                                                return object;
                                        }

                                        public String getIdValue(Object object, 
int index) {
                                                return (String) object;
                                        }
                                
                            };
                            final List selected = new ArrayList();
                            IModel model = new IModel() {

                                        public Object getObject() {
                                                return selected;
                                        }

                                        public void setObject(Object object) {
                                                selected.clear();
                                                selected.addAll((List) object);
                                        }

                                        public void detach() {
                                        }
                                
                            };
                            
                            IModel choicesModel = new AbstractReadOnlyModel() {

                                        @Override
                                        public Object getObject() {
                                            final List<String> choices = new 
ArrayList<String>();
                                            choices.add("1");
                                            choices.add("2");
                                            return choices;
                                        }
                                
                            };
                            
                            item.add(new Palette("palette", model, 
choicesModel, renderer, 10, false));
                        }
                        
                });
            
            add(new FeedbackPanel("feedback", new 
ContainerFeedbackMessageFilter(this)));
        }
        
}


-- 
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