Hi *,

i would like to implement a testing issue for me. I add three panels with a 
link on every panel. If i click one panel-link all panels should become green. 
But i dont get that to work. The model in the AttributeModifier cant be 
refreshed. What am i missing here?

Thank you for helping me understanding this great framework.
Per

<code>
package de.yhd.buma.refreshtests;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;

public abstract class BasePanel extends Panel {

  private List<IChangeListener> listeners = new ArrayList<IChangeListener>();
  
  /**
   * 
   * Constructor of BasePanel
   * @param pId
   */
  public BasePanel(String pId) {
    super(pId);
  }

  /**
   * 
   * Constructor of BasePanel
   * @param pId
   * @param pModel
   */
  public BasePanel(String pId, IModel pModel) {
    super(pId, pModel);
  }

  /**
   * adds a changeListener to a panel
   * @param pListener the listener of the panel
   */
  public void addChangeListener(IChangeListener pListener) {
    listeners.add(pListener);
  }
  
  /**
   * removes a changeListener from a panel
   * @param pListener the listener of the panel
   */
  public void removeChangeListener(IChangeListener pListener) {
    listeners.remove(pListener);
  }
  
  /**
   * initialize the panel.
   * @param pModel the model part of triad
   */
  public abstract void initialize(Object pModel);
  
  /**
   * Refresh the data model.
   * The model assigned to panel can be set thru this method.
   * It´s the partner to the model assigned in initialize.
   * The components displayed in panel will not initialized again.
   * This has been implemented because [EMAIL PROTECTED] 
#setModelObject(Object)}
   * is final.
   * @param pModel the model part of triad
   */
  public void refreshModelObject(Serializable pModel) {
    modelChanging();
    setModel(new Model(pModel));
    modelChanged();
  }
  
  /**
   * Informs listeners of model content change event
   */
  protected void fireContentChanged() {
    fireContentChanged(null);
  }
  
  /**
   * Informs listeners of model content change event
   * @param pParameter parameter that have changed
   */
  protected void fireContentChanged(Object pParameter) {
    for (IChangeListener element : listeners) {
      element.contentChanged(pParameter);
    }
  }
}

##########################################

package de.yhd.buma.refreshtests;

import java.io.Serializable;


public interface IChangeListener extends Serializable {
  
  
/**
 * Method informs a listener if the content changed 
 * @param pParam
 */
  void contentChanged(Object pParam);
  
}

##############################

package de.yhd.buma.refreshtests;

import java.io.Serializable;

public class RefreshLinkModel implements Serializable {
  
private static final long serialVersionUID = 1L;
private Boolean _highlite = false;
  
  public void  toggleHighlite() {
    _highlite = !_highlite;
  }

  public Boolean getHighlite() {
    return _highlite;
  }

  public void setHighlite(Boolean pHighlite) {
    _highlite = pHighlite;
  }

}

################################

package de.yhd.buma.refreshtests;

import java.io.Serializable;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.model.Model;


public class RefreshLinkPanel extends BasePanel {
  
  private static final long serialVersionUID = -4422790485992136492L;

  /**
   * Constructor of RefreshLinkPanel
   */
  public RefreshLinkPanel(String pId) {
    super(pId);
  }

  /**
   * 
   * @see refreshtests.BasePanel#initialize(java.lang.Object)
   */
  @Override
  public void initialize(Object pModel) {
    RefreshLinkModel model = (RefreshLinkModel) pModel;
    refreshModelObject(model);
    
    add(new AttributeModifier("style", true, new MyStyleModifierModel(model)));
    
    AjaxLink link = new AjaxLink("link") {
      private static final long serialVersionUID = 2337879573169864643L;

      public void onClick(AjaxRequestTarget target) {
        RefreshLinkModel m = (RefreshLinkModel) getParent().getModelObject();
        m.toggleHighlite();
        target.addComponent(this);
        fireContentChanged();
      }
    };
    add(link);
  }
  
  class MyStyleModifierModel extends Model {
    private static final long serialVersionUID = 1L;

    /**
     * Constructor of RefreshLinkPanel.MyStyleModifierModel
     */
    public MyStyleModifierModel(Serializable m) {
      super(m);
    }
    
    /**
     * @see org.apache.wicket.model.Model#getObject()
     */
    public Object getObject() {
      RefreshLinkModel m = (RefreshLinkModel) super.getObject();
      if (m.getHighlite()) {
        return "background:yellow;";
      }
      return "background:green;";
    }
  }
}

############################################

package de.yhd.buma.refreshtests;

public class RefreshPanel extends BasePanel {

  private static final long serialVersionUID = 1L;

  /**
   * Constructor of RefreshPanel
   */
  public RefreshPanel(String id) {
    super(id);
  }
  
  /**
   * @see refreshtests.BasePanel#initialize(java.lang.Object)
   */
  @Override
  public void initialize(Object pModel) {
    RefreshLinkPanel one = new RefreshLinkPanel("one");
    RefreshLinkPanel two = new RefreshLinkPanel("two");
    RefreshLinkPanel three = new RefreshLinkPanel("three");
    
    IChangeListener l = new MyChangeListener();
    
    one.addChangeListener(l);
    two.addChangeListener(l);
    three.addChangeListener(l);
    
    one.initialize(new RefreshLinkModel());
    two.initialize(createHighlited());
    three.initialize(new RefreshLinkModel());
  
    add(one);
    add(two);
    add(three);
  }
  
  private RefreshLinkModel createHighlited() {
    RefreshLinkModel modelOne = new RefreshLinkModel();
    modelOne.toggleHighlite();
    return modelOne;
  }

  class MyChangeListener implements IChangeListener {
    private static final long serialVersionUID = 1L;

    /**
     * 
     * @see refreshtests.IChangeListener#contentChanged(java.lang.Object)
     */
    public void contentChanged(Object pParam) {
      RefreshLinkPanel p1 = (RefreshLinkPanel) get("one");
      p1.refreshModelObject(createHighlited());
      RefreshLinkPanel p2 = (RefreshLinkPanel) get("two");
      p2.refreshModelObject(createHighlited());
      RefreshLinkPanel p3 = (RefreshLinkPanel) get("three");
      p3.refreshModelObject(createHighlited());
    }
  }
}

</code>
-- 
Psssst! Schon vom neuen GMX MultiMessenger gehört?
Der kanns mit allen: http://www.gmx.net/de/go/multimessenger

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

Reply via email to