i have simple-ish form consists of variable number of elements in form using listview. each element in table row, , contains name (with link works fine) , checkbox, marks line deletion. checkboxs editable in form. @ bottom of form 'delete selected' button, used delete entries selected check.
i have tried doing repeatingview , listview, , both have same problem - internal model state of checkboxes not updated when form submitted - false. in searchwrapper class setselected method, logger output never displayed (other logging it's not logging issue)
can see why wrong?
public class savedsearchestab extends panel { private static final logger logger = ... /** * */ public savedsearchestab( string p_id ) { super( p_id ); form<?> l_form = new form<object>( "savedsearchform" ) { /** * @see org.apache.wicket.markup.html.form.form#onsubmit() */ protected void onsubmit() { logger.info( "form submitted!" ); for( string l_paramname : getrequest().getrequestparameters().getparameternames() ) { logger.info( "formparam: " + l_paramname + ", value=" + getrequest().getrequestparameters().getparametervalue( l_paramname ) ); } ondeleteselected(); } }; l_form.setoutputmarkupid( true ); add( l_form ); list<usersavedsearch> l_searches = getsearches(); listview<usersavedsearch> l_repeater = new listview<usersavedsearch>( "repeater", l_searches ) { protected void populateitem( final listitem<usersavedsearch> p_item ) { final usersavedsearch l_search = p_item.getmodelobject(); searchwrapper l_wrapper = new searchwrapper( l_search ); ajaxlink<usersavedsearch> l_link = new ajaxlink<usersavedsearch>( "searchnamelink" ) { private static final long serialversionuid = 1l; public void onclick( ajaxrequesttarget p_target ) { selectsearch( l_search ); } }; string l_linktext = l_search.getname(); label l_linklabel = new label( "searchnamelabel", l_linktext ); l_link.add( l_linklabel ); p_item.add( l_link ); textarea<string> l_descriptionarea = new textarea<string>( "searchsummary", new model<string>( tosummary( l_search ) ) ); p_item.add( l_descriptionarea ); checkbox l_checkbox = new checkbox("searchcheckbox", new propertymodel<boolean>( l_wrapper, "selected" ) ); p_item.add( l_checkbox ); } }; l_repeater.setreuseitems( true ); l_form.add(l_repeater); } private list<usersavedsearch> getsearches() { list<usersavedsearch> l_searches = new arraylist<usersavedsearch>(); // make couple of example ones testing usersavedsearch l_eg = new usersavedsearch(); l_eg.setname( "example search 1" ); l_eg.setsearcharea( searcharea.customers ); l_searches.add( l_eg ); l_eg = new usersavedsearch(); l_eg.setname( "example search 2" ); l_eg.setsearcharea( searcharea.customers ); l_searches.add( l_eg ); return l_searches; } private string tosummary( usersavedsearch p_search ) { return "summary of " + p_search.getname(); // todo } protected void ondeleteselected() { } protected void selectsearch( usersavedsearch p_search ) { logger.info( "search " + p_search.getname() + " should displayed!" ); } private class searchwrapper implements serializable { private static final long serialversionuid = 1l; private usersavedsearch m_data; private boolean m_todelete; public searchwrapper( usersavedsearch p_data ) { m_data = p_data; m_todelete = false; } public boolean isselected() { return m_todelete; } public void setselected( boolean p_selected ) { logger.info( "setting searchwrapper selected state: " + p_selected ); m_todelete = p_selected; } public usersavedsearch getsearch() { return m_data; } } html:
<wicket:panel> <span class="sectiontitle"><wicket:message key="sectiontitle">savedsearches</wicket:message></span> <form wicket:id="savedsearchform"> <fieldset> <table id="savedsearchtable"> <tbody wicket:id="repeater"> <tr> <td><input wicket:id="searchcheckbox" type="checkbox" name="searchselect" wicket:message="value:fragment.select.search" /></td> <td><a href="#" wicket:id="searchnamelink"><span wicket:id="searchnamelabel">searchname</span></a></td> </tr> <tr> <td colspan="2"><textarea wicket:id="searchsummary" readonly="readonly" rows="3" cols="100"/></td> </tr> </tbody> <tr class="buttonpanel"> <td colspan="2"> <input type="submit" wicket:message="value:button.deleteselectedsearches"/> </td> </tr> </table> </fieldset> </form> </wicket:panel> thanks in advance.
the problem not defining clear model object when populate checkboxes. model should initialized in way can in onsubmit method.
i suggest instantiate model object in savedsearchestab constructor, make sure variable final, add form , make sure use during in layers.
about way try recover variables, not work way, it's not how wicket supposed work, if instantiate model object i'm suggesting you, can access variable on onsubmit method , have properties form, don't have care map form values pojos, wicket model.
Comments
Post a Comment