Hi,
addControl is for adding controls while addModel is for adding non controls
such as domain objects.
A table link is a normal HTML link and performs a get request not a form post.
So you cannot save
form state from the table control as no Form data is available.
regards
Bob
On 2011/03/09 22:06 PM, Yinghai Zhao wrote:
> I'm trying to create a page similar to the searchable table example.
>
> I have a form which have a fieldset and a submit button, the fieldset
> includes two fields,a
> CheckList and a Select.
> the form's state will be saved when the submit button is clicked, as well as
> in a
> tables ActionListener(when paging and sorting).
> And on init, the page will restore the saved fields from the form and
> retrieve database record based
> on the field values.
>
> I found some interesting behaviors when saving the form's state.
>
> 1.if the form is declared with @Bindable, the submit botton will save the
> form's value and populate
> the table. if form is added using addModel instead of @Bindable. field value
> will be cleared after
> button click and the table will be empty.
>
> 2. table paging will not save the state of the form, if i try to go to the
> next page. the form will
> be cleared and table showing no records.
> I have another page does similar things, the only different is that that form
> only includes a text
> field, a select and submit button without fieldset.
>
> Currently my work around is setting the page back to stateful again, seems
> working fine.
>
>
> here are some relevant code snippet in the page.
>
> on init method:
>
> public void onInit()
> {
> super.onInit();
> Context context = getContext();
>
> // Restore form and table state from the session
> form.restoreState(context);
> table.restoreState(context);
>
> table.getControlLink().setActionListener(new ActionListener() {
> public boolean onAction(Control source) {
> form.saveState(getContext());
> table.saveState(getContext());
>
> return true;
> }
> });
>
> buttons listener method:
>
> public boolean onSubmitClicked(){
> try{
> form.saveState(getContext());
> return true;
> }catch(Exception e)
> {
> msg = " Failed due to: " + e.toString();
> getContext().setFlashAttribute("flash", msg);
> }
> return false;
> }
>