I've read this on the wicket wiki to add new component via ajax.

http://cwiki.apache.org/WICKET/how-to-repaint-a-listview-via-ajax.html
http://cwiki.apache.org/WICKET/how-to-repaint-a-listview-via-ajax.html 

My problem is that if the user have added some values in the form and the
clicks the 
ajax update link the form isn't preserved. How can I preserve the following
form

public class AttributePage extends BaseAdministrationPage {
        
        private se.edgesoft.hairless.entities.item.Item item;
        List<SubItem> subItems = new LinkedList<SubItem>();
        List<Element> elements;
        
        public List<SubItem> getSubItems() {
                return subItems;
        }

        public AttributePage(  se.edgesoft.hairless.entities.item.Item item ){
                this.item = item;
                elements = 
getCategoryDao().getElements(getItem().getSubCategory() ); 
                final CSSFeedbackPanel panel = new CSSFeedbackPanel( "feedback" 
);
                panel.setOutputMarkupId(true);
                add( panel );
                
                /**
                final IModel subItemsModel = new LoadableDetachableModel(){
                        private static final long serialVersionUID = 1L;
                        protected Object load(){
                                
                                
                                return subItems;
                        }
                };
                */
                
                for( int i = 0; i < 10; i++ ){
                        SubItem subItem = new SubItem();
                        subItem.setItem(getItem());
                        subItems.add( subItem );
                        subItem.setSortOrder(i);
                        List<Attribute> attributes = new 
LinkedList<Attribute>();
                        for( Element element : getElements() ){
                                Attribute attribute = new Attribute();
                                attribute.setData( null );
                                attribute.setElement( element  );
                                attribute.setSubItem(subItem);
                                attributes.add( attribute );
                                subItem.setAttributes(attributes);
                        }
                }
                
                final WebMarkupContainer itemContainer = new
WebMarkupContainer("itemContainer");
                itemContainer.setOutputMarkupId(true);
                itemContainer.add(getItemListView());

                final Form attributeForm = new Form( "attributeForm" );
                

                IndicatingAjaxButton ajaxBtn = new 
IndicatingAjaxButton("create",
attributeForm ){
                 
                        private static final long serialVersionUID = 1L;
                        
                        @Override
                        protected IAjaxCallDecorator getAjaxCallDecorator()
                        {
                                return new IAjaxCallDecorator()
                                {
                                        private static final long 
serialVersionUID = 1L;
                                        public CharSequence 
decorateScript(CharSequence script)
                                        {
                                                return 
"document.getElementById('"+ getMarkupId()
+"').disabled=true;"+script;
                                        }
                                        public CharSequence 
decorateOnFailureScript(CharSequence script)
                                        {
                                                return 
script+"document.getElementById('"+ getMarkupId()
+"').disabled=false;";
                                        }
                                        public CharSequence 
decorateOnSuccessScript(CharSequence script)
                                        {
                                                return 
script+"document.getElementById('"+ getMarkupId()
+"').disabled=false;";
                                        }
                                };
                        }

                        protected void onSubmit(AjaxRequestTarget target, Form 
form){
                                this.setEnabled(false);
                                target.addComponent(this);
                target.addComponent(panel);
                                se.edgesoft.hairless.entities.item.Item item = 
getItemDao().getItem( 
getItem().getId() );
                                Long cachedBalance = new Long( 0 );
                                for( SubItem subItem : subItems ){
                                        cachedBalance += subItem.getBalance();
                                        subItem.setItem( item );
                                        getItemDao().save( subItem );   
                                        for( Attribute attribute : 
subItem.getAttributes() ){
                                                attribute.setSubItem(subItem);
                                                getItemDao().save(attribute);
                                        }
                                }
                                item.setCachedBalance(cachedBalance);
                                getItemDao().save(item);
                                this.setEnabled( true );
                                
            }

            protected void onError(AjaxRequestTarget target, Form form)
            {
                target.addComponent(panel);
            }
        };
        ajaxBtn.setOutputMarkupId( true );
                
        
        attributeForm.add(itemContainer);
        attributeForm.setOutputMarkupId( true );
                attributeForm.add( ajaxBtn );
                add( attributeForm );
                
                
                add(new AjaxLink( "newAttributeLink" ){
                        private static final long serialVersionUID = 1L;

                        @Override
                        public void onClick( AjaxRequestTarget target ) {
                                target.addComponent(attributeForm);
                                newAttribute();
                                attributeForm.addOrReplace(itemContainer);
                                
                        }
                        
                });
                
        }
        
        private void newAttribute(){
                SubItem subItem = new SubItem();
                subItem.setItem(getItem());
                subItems.add( subItem );
                subItem.setSortOrder(getSubItems().size() + 1);
                List<Attribute> attributes = new LinkedList<Attribute>();
                for( Element element : getElements() ){
                        Attribute attribute = new Attribute();
                        attribute.setData( null );
                        attribute.setElement( element  );
                        attribute.setSubItem(subItem);
                        attributes.add( attribute );
                        subItem.setAttributes(attributes);
                }
        }
        
        private ListView getItemListView(){
                return new ListView("subItems", getSubItems() ){

                        private static final long serialVersionUID = 1L;

                        @Override
                        protected void populateItem(ListItem listItem ) {
                                
                                final SubItem subItem = (SubItem) 
listItem.getModelObject();
                                TextField sortOrder = new 
TextField("sortOrder", new PropertyModel(
subItem, "sortOrder" ));
                                sortOrder.setRequired( true );
                                listItem.add( sortOrder );
                                
                                TextField balance = new TextField("balance", 
new PropertyModel( subItem,
"balance" ));
                                balance.setRequired( true );
                                listItem.add(balance);

                                listItem.add( new ListView( "attributes" , 
subItem.getAttributes()){

                                        private static final long 
serialVersionUID = 1L;

                                        @Override
                                        protected void populateItem(ListItem 
attributeItem ) {
                                                Attribute attribute = 
(Attribute) attributeItem.getModelObject();
                                                
                                                TextField attributeField = new 
TextField( "attribute", new
PropertyModel(attribute, "data" ) );
                                                attributeField.add( 
StringValidator.lengthBetween(1, 100));
                                                attributeField.setRequired( 
true );
                                                attributeItem.add( 
attributeField );
                                        }
                                        
                                });
                        }

                
                        
                };
        }

        
        public  se.edgesoft.hairless.entities.item.Item getItem(){
                return item;
        }

        public List<Element> getElements() {
                return elements;
        }
}
 
-- 
View this message in context: 
http://www.nabble.com/Preserve-form-on-ajax-update-tp17066683p17066683.html
Sent from the Wicket - User mailing list archive at Nabble.com.


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

Reply via email to