Now it appears I have a problem only with reading the checkbox values. Am I doing something wrong here?
I added the listView.setReuseItems(true); after the anonymous listview class. Now, the checkbox value submissions do not arrive properly onto the server-side. It is wysiwyg only seldom. I often have to press the submit button twice or more for the validator to receive the same checkbox selections as seen on the browser screen. Sometimes it "hangs" and anything I do on the browser does not affect the checkbox values received by the validator. Simultaneously, the textfields seem to work just fine. How can I use the checkboxes properly? ** Martin 2008/2/19, Igor Vaynberg <[EMAIL PROTECTED]>: > first step is to call listview.setreuseitems(true), that will get rid > of the disappearing input on invalidation. please read listview > javadoc. > > -igor > > > On Feb 18, 2008 9:23 PM, Martin Makundi > <[EMAIL PROTECTED]> wrote: > > Hi! > > > > I have a simple html table with checkboxes and input text fields. My > > goal is to validate that if the checkbox on the row is selected, the > > respective input field should contain text. And vice versa, if the > > input field contains text, the checkbox should be checked. > > > > I have now constructed a nearly working version of the page. The > > problems are as follows: > > a) Checking the checkbox and submitting it, returns > > checkBox.getModelObject() as False. Shouldn't it pick the value from > > the form, which is checked? > > b) If I write text in a textfield, the form gets invalidated due to > > the "unchecked" checkbox on the row, and the textfield gets cleared. I > > would like the typed text not to be cleared out. > > c) If I type anything into the form after the feedback, and submit > > again, the form is not validated, but the values remain on the screen, > > and the feedback messages are cleared. This seems weird, as if the > > form would be in some kind of tilt mode now. I get a warning on the > > logs: IFormValidator in form `todoForm` depends on a component that > > has been removed from the page or is no longer visible. Offending > > component id `todo`. > > > > Naturally I would like the form to behave more intuitively. Most > > likely I am doing something significantly wrong here now. And the > > warning message, why is that and how should I operate it insteaed? > > Please have a look, here is my code: > > > > <html xmlns:wicket="http://wicket.sourceforge.net"> > > <head> > > <title>Welcome to TODO application</title> > > </head> > > <body> > > > > <h2>Todo weekdays descriptions</h2> > > <span wicket:id="feedback">Feedback messages will be here.</span> > > <form name="todoForm" wicket:id="todoForm"> > > <table cellspacing="2" cellpadding="0" border="0"> > > <thead> > > <tr> > > <th align="center">Date</th> > > <th align="center">Selected</th> > > <th align="left">Description</th> > > </tr> > > </thead> > > <tbody> > > <tr wicket:id="listView"> > > <td align="right" NOWRAP><span > > wicket:id="date"></span></td> > > <td><input type="checkbox" wicket:id="todo"/></td> > > <td><input type="text" wicket:id="description" size="70"/></td> > > </tr> > > </tbody> > > </table> > > <input type="submit" value="Save"> > > </form> > > </body> > > </html> > > > > public class Todos extends WebPage { > > private static final String TODO_FORM = "todoForm"; > > private static final String DESCRIPTION = "description"; > > private static final String TODO = "todo"; > > private static final String DATE = "date"; > > private static final String LIST_VIEW = "listView"; > > private List<Todo> todoList; > > > > public Todos() { > > final FeedbackPanel feedbackPanel = new FeedbackPanel("feedback"); > > User dummyUser = new User(); > > > > Form todoForm = new Form(TODO_FORM); > > final List<FormComponent> formComponentsToBeValidated = new > > LinkedList<FormComponent>(); > > @SuppressWarnings("serial") > > ListView listView = new PropertyListView(LIST_VIEW, > > getTodoList(dummyUser)) { > > protected void populateItem(ListItem item) { > > Todo todo = (Todo) item.getModelObject(); > > item.add(new Label(DATE, new > > Model(Convert.toString(todo.getTodoDay())))); > > CheckBox checkBox = new CheckBox(TODO, new > > PropertyModel(todo, Todo.SELECTED)); > > TextField textField = new TextField(DESCRIPTION, new > > PropertyModel(todo, Todo.DESCRIPTION)); > > item.add(checkBox); > > formComponentsToBeValidated.add(checkBox); > > item.add(textField); > > formComponentsToBeValidated.add(textField); > > } > > }; > > > > @SuppressWarnings("serial") > > AbstractFormValidator formValidator = new AbstractFormValidator() { > > public FormComponent[] getDependentFormComponents() { > > return formComponentsToBeValidated.toArray(new > > FormComponent[formComponentsToBeValidated.size()]); > > } > > > > public void validate(Form form) { > > Boolean textRequired = null; > > boolean checkedButDescriptionMissing = false; > > boolean descriptionGivenButUnchecked = false; > > for (FormComponent formComponent : formComponentsToBeValidated) { > > if (textRequired == null) { > > CheckBox checkBox = (CheckBox) formComponent; > > textRequired = (Boolean) checkBox.getModelObject(); > > System.out.print("Checked: \"" + textRequired + "\" "); > > } else { > > TextField textField = (TextField) formComponent; > > boolean emptyField = Utils.isEmpty(textField.getValue()); > > System.out.println("Field: \"" + textField.getValue() + "\""); > > if ((textRequired.booleanValue()) && (emptyField)) { > > if (!checkedButDescriptionMissing) { > > error(textField, "checked_but_description_missing"); > > checkedButDescriptionMissing = true; // Show this only once > > } > > } else if ((!textRequired.booleanValue()) && (!emptyField)) { > > if (!descriptionGivenButUnchecked) { > > error(textField, "description_given_but_unchecked"); > > descriptionGivenButUnchecked = true; // Show this only once > > } > > } > > textRequired = null; > > } > > } > > } > > }; > > todoForm.add(formValidator); > > todoForm.add(listView); > > add(feedbackPanel); > > add(todoForm); > > } > > > > private List<Todo> getTodoList(User user) { > > if (todoList == null) { > > Date currentWeekStartDate = TakpSession.getWeekStartDate(); > > todoList = TodoServices.browseWeek(currentWeekStartDate, user); > > } > > > > return todoList; > > } > > } > > > > > > > > ** > > Martin > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
