You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Gonzalo Aguilar Delgado <ga...@aguilardelgado.com> on 2014/11/04 11:53:23 UTC

Repeaters and feedaback panel (not reporting error after submit)

Hi all!

We are using a RefreshingView to show some panels inside a form. This 
way we can add elements to a list of objects that will be processed 
after submit.

The problem is that ajax on the items of the RefreshingView does not 
refresh after the submit button is hit on the form.


We tried to use a ListView but it seems it cannot report to feedback 
panels because reuse item strategy that's why we are using a 
RefreshingView:
     http://wicket.apache.org/guide/guide/repeaters.html

----

RefreshingView<TarjRealType> cardListView = new 
RefreshingView<TarjRealType>("tarjetas"){

             /**
              *
              */
             private static final long serialVersionUID = 1L;

             @Override
             protected void populateItem(Item<TarjRealType> item) {
                 item.add(new CardEntryComponent("card", 
(IModel<*TarjRealType*>) item.getDefaultModel()));
             }

             @Override
             protected Iterator<IModel<TarjRealType>> getItemModels() {
                  List<IModel<TarjRealType>> cardModelList = new 
ArrayList<IModel<TarjRealType>>();
                  for(TarjRealType card : 
((List<TarjRealType>)this.getDefaultModelObject()))
                      cardModelList.add(Model.of(card));
                 return cardModelList.iterator();
             }

         };

         cardListView.setItemReuseStrategy(new 
ReuseIfModelsEqualStrategy());



In the CardEntryComponent we have an ajaxLink (a button) that sets the 
info inside TarjRealType object.

         panNumberField = new TextField<String>("pan", String.class);
         panNumberField.setRequired(true);
         panNumberField.setOutputMarkupId(true);
...

add(new AjaxLink<TarjRealType>("generatePan", (IModel<*TarjRealType*>) 
CardEntryComponent.this.getDefaultModel()) {
             Random random = new Random();
             public void onClick( AjaxRequestTarget target ){
                 TarjRealType card = (TarjRealType) 
this.getDefaultModelObject();
                 String PAN = 
String.valueOf(Math.abs(random.nextLong())).substring(0,15);
                 String realPAN = PAN + Luhn.generateDigit(PAN);
                 card.setPan(realPAN);
                 target.add(panNumberField);
             }
         });

It sets a random PAN number inside.

It works nice because panNumberField is required and when I hit submit 
button on the main form, it says there's nothing in the text field via 
feedback panel. After I reload the page and hit the generatePan button, 
it adds via ajax the PAN into the field and when I hit submit again 
everything works.

The problem is that after submit, the generatePan works but does not 
refresh the panNumberField so it appears as empty.

Is this a problem of the reuse strategy?

Thank you in advance.