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]

Reply via email to