the inMethod DataGrid is excellent.
plb

nanotech wrote:
please help,Anyone?

---------------------------
Hi All,
I have a Save Form where user should be able to add/save new records and
should be able
to view feedback if there are any errors.
In short, When user loads up the page he sees a form and under it a
DataTable
which holds the deafault search results.

If he tries to add a record and Add is "Successful" then DataTable gets
updated via Ajax.
In case of "Failure" errors are reported on feedback panel.

Here is how I have implemented it:


 ===================
 SaveContactPage.html
 ===================
 <div wicket:id="saveUserFeedback">[Feedback-error messages etc.]</div>
 <form wicket:id="saveUserForm">
        <table>
              <tr>
                <td>First Name:</td>
                <td><input type="text" wicket:id="firstName"/></td>
              </tr>
              <tr>
                 <td>Last Name:</td>
                 <td><input type="text" wicket:id="lastName"/></td>
              </tr>
              <tr>
                 <td><input type="submit" wicket:id="saveContactButton"
/></td>
               </tr>
        </table>
 </form>
 <!--  Updatable container for search/add results  -->
 <div wicket:id="resultsContainer">
        <table wicket:id="addResultsTable">[Results for add/search
 Contacts]</table>
 </div>
=====================
 SaveContactPage.java
 ======================
public class SaveContactPage extends WebPage
 {
        // Hold reference to provider..
        AddContactDataProvider provider;
        // Hold refernce to FeedbackPanel...
        FeedbackPanel saveUserFeedback;
        //Hold refernece to updatable dataTable's container..
        WebMarkupContainer resultsContainer;

        public SaveContactPage()
        {
                add(saveUserFeedback = new
 FeedbackPanel("saveUserFeedback"));
                saveUserFeedback.setOutputMarkupId(true);

                SaveUserForm userForm = new SaveUserForm("saveUserForm");
                add(userForm);

                // Get a new provider.
                provider = new AddContactDataProvider((ContactInfoPOJO)
                                                        
userForm.getModelObject());

                // Get all the columns.
                List<IColumn> columns = createColumns();

                resultsContainer = new
WebMarkupContainer("resultsContainer");
                resultsContainer.add(new
DataTable("addResultsTable",columns,
                                                    provider, 10));

        }

        private List<IColumn> createColumns()
        {
                List<IColumn> columns = new ArrayList();
                columns.add(new
PropertyColumn(this.getModel(),"firstName"));
                columns.add(new PropertyColumn(this.getModel(),"lastName"));
        }

 // Begin Save USER Form.
 private class SaveUserForm extends StatelessForm
 {
        public SaveUserForm(String id)
        {
                super(id);
                // Set Form's model
                setModel(new CompoundPropertyModel(new ContactInfoPOJO()));
                add(new TextField("firstName"));
                add(new TextField("lastName"));
                add(new AjaxFallbackButton("saveContactButton", this)
                {
                        @Override
                        protected void onSubmit(AjaxRequestTarget
target,Form form)
                        {
                                
                                // TODO 1: Is this Correct approach
                                // (i.e. calling the provider
                                // again to refresh the container)
                                // On Submit....call the provider again?
                                

                                provider = new
AddContactDataProvider(form.getModelObject());

                                //Refresh the dataTable
                                target.addComponent(resultsContainer);

                               // In case of Failure...Display the error
messages.

                        }

                        protected void onError(AjaxRequestTarget target,Form
form)
{ // TODO 3: Show Errors...if any
                                // But Error happned in DataProvider...
                                // How do I get hold of Error Object Here...
                                
                                target.addComponent(saveUserFeedback);
                        }

                });

        }
 }
 }


 ======================
 AddContactDataProvider.java
 ======================
 public class AddContactDataProvider extends SortableDataProvider
 {

    private ContactInfoPOJO contactPojo;
    private ContactManager contactManager;

    public AddContactDataProvider(ContactInfoPOJO contactPojo)
    {
        this.contactPojo = contactPojo;
        contactManager = new JDBCContactManager();
    }

    public Iterator iterator(int first, int count)
    {
        // Save the Contact...
        contactManager.saveContact(contactPojo);
        
        //TODO 2::: HOW? WHERE???
        //If Save FAILED then GET ERROR MESSAGE
        


        // Get the saved list back....
        List contacts = contactManager.getUsers();
        if (first > 0) {
                contacts = contacts.subList(first, first + count);
        }
        return contacts.iterator();
    }

    public IModel model(Object object)
    {
         return new ContactModel((ContactInfoPOJO)object);
    }

    public int size()
    {
        return contactManager.getContacts().size();
    }

 }



 Questions:
 1. Is calling dataprovider again the correct approach for updating the
 datatable? (See TODO 1 above) Can someone please suggest an alternate
approach?
 2. How do I pass the Error Object to Page's Panel from DataProvider in case
 of Unsuccessful  save?(see TODo: 2 above)
 3. Will onError be called if I somehow plugin the error message to feedback
  Panel (See TODO: 3)


 Thanks for reading the post.



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

Reply via email to