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]