in your validate method why dont you iterate over the todo items
instead of components. isnt that what the checkboxes are bound to?

also you are using a LISTview, are todo items really identified
uniquely by their index returned from
 todoList = TodoServices.browseWeek(currentWeekStartDate, user) ?

-igor



On Feb 19, 2008 12:35 PM, Martin Makundi
<[EMAIL PROTECTED]> wrote:
> 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]
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to