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]

Reply via email to