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]