It works !
Thanks a lot Vincent :)
jb

Vincent Demay wrote:
Hi Jean-Baptiste

Jean-Baptiste Bellet a écrit :
Hello all,
This is my first wicket message, so first of all, I would like to gongrats the whole team for the great job !
Now, my problem :
I have created a NewFeedbackPanel which extends FeedbackPanel and override OnBeforeRender(). This NewFeedbackPanel is created into a class and added to a target :

final NewFeedbackPanel indicator = new NewFeedbackPanel("indicator", 30000, true); final NewAjaxButton link = new NewAjaxButton(DOWNLOAD_NEW, new ResourceModel("preferences.downloadNew"))
    {
        @Override
        public void onClick(AjaxRequestTarget target)
        {
            ..........
            // log successful message and refresh target feedback
this.info(getLocalizer().getString("preferences.downloadSuccess", this));
            target.addComponent(indicator);
            target.addComponent(PhoneDetails.this);
        }
    };
add(link);
add(indicator);


When I test, i can't see any feedback, and the method OnBeforeRender() of the class NewFeedbackPanel is never called.
Any idea ?
Thanks,
jb


Code for NewFeedbackPanel.java :
public class NewFeedbackPanel extends FeedbackPanel
{

    private static final int DEFAULT_TIME = 1000;

    private boolean _blocker;

    private int _displayTime;

    public NewFeedbackPanel(String id)
    {
        this(id, DEFAULT_TIME, false);
    }

    public NewFeedbackPanel(String id, int displayTime)
    {
        this(id, displayTime, false);
    }

    public NewFeedbackPanel(String id, int displayTime, boolean blocker)
    {
        super(id);
        _blocker = blocker;
        setOutputMarkupPlaceholderTag(true);
add(HeaderContributor.forCss(NewFeedbackPanel.class, "feedback.css"));
        setVisible(false);
Here, you feedback is set as not visible. If you take a look into Component#internalBeforeRender, you can see that a not visible component never call onBeforeRender method.

So you need to override Component#callOnBeforeRenderIfNotVisible to return true in order to evaluate you code in onBeforeRender
        _displayTime = displayTime > 0 ? displayTime : DEFAULT_TIME;
        if (_blocker)
        {
add(new AttributeAppender("class", new Model("hidder"), " "));
        }
    }

    @Override
    protected void onBeforeRender()
    {
        super.onBeforeRender();
        IRequestTarget target = RequestCycle.get().getRequestTarget();
        if (anyMessage())
        {
            if (target instanceof AjaxRequestTarget)
            {
String javascript = "window.setTimeout(function(){window.document.getElementById('" + getMarkupId() + "').style.display = 'none'}, " + _displayTime + ");"; ((AjaxRequestTarget) target).appendJavascript(javascript);

            }
        }
        else
        {
            setVisible(false);
        }
    }


}

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


Cheers

--
Vincent Demay


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


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

Reply via email to