Update:
When setting #setAllowDefault(false), the #onevent method of the web markup
container is called, but in addition also the #on select method of sortable.
When setting #setAllowDefault(true), the #onevent method is not called at all,
only the #on select method.
It seems that setAllowDefault(false or true) does not prevent the event
bubbling to parents. What might be missing?
@Override
protected void populateItem(ListItem<String> item) {
...
WebMarkupContainer infoLink = new WebMarkupContainer("infoLink");
infoLink.add(new AjaxEventBehavior("onclick") {
@Override
protected void onEvent(AjaxRequestTarget target) {
}
@Override
protected void updateAjaxAttributes(AjaxRequestAttributes
attributes) {
super.updateAjaxAttributes(attributes);
attributes.setAllowDefault(false);
}
});
@Override
public void onSelect(AjaxRequestTarget target, List<String> items) {
…..
Chris
> Am 06.02.2015 um 21:20 schrieb Martin Grigorov <[email protected]>:
>
> Hi,
>
> On Fri, Feb 6, 2015 at 10:13 PM, Chris <[email protected]> wrote:
>
>> Hi Sebastian,
>>
>> thanks for your help. Has that the method signature recently changed? The
>> method #setPreventDefault is not available on the object #attributes.
>>
>>
>> Link link = new AjaxFallbackLink<String>("link") {
>>
>> @Override
>> public void onClick(AjaxRequestTarget target) {
>> }
>>
>> @Override
>> protected void updateAjaxAttributes(AjaxRequestAttributes
>> attributes) {
>> super.updateAjaxAttributes(attributes);
>> attributes.setPreventDefault(true);
>>
>
> In Wicket 6.x it is wrongly named "setAllowDefault()".
>
>
>> }
>> };
>>
>> Chris
>>
>>
>>
>>> Am 06.02.2015 um 19:56 schrieb Sebastien <[email protected]>:
>>>
>>> Hi Chris,
>>>
>>> Yes, generally speaking, you have to cancel bubbling events to parent
>>> elements.
>>> For a [Ajax]Link (or any event-behavior related) you have to set the
>>> preventDefault property to true;
>>>
>>> protected void updateAjaxAttributes(AjaxRequestAttributes attributes)
>>> {
>>> super.updateAjaxAttributes(attributes);
>>>
>>> attributes.setPreventDefault(true); // cancel bubbling
>>> }
>>>
>>> Hope this helps,
>>> Best regards,
>>> Sebastien
>>>
>>> On Fri, Feb 6, 2015 at 6:59 PM, Chris <[email protected]> wrote:
>>>
>>>> Hi Sebastian,
>>>>
>>>> I would have a follow-up question regarding the #Sortable:
>>>>
>>>>
>>>> Is it possible to add an AjaxLink to the item with its own behavior so
>>>> that if the user clicks on this link, then its on-click behavior should
>> be
>>>> called instead of the #onselect method from the sortable. At the moment,
>>>> the #onselect method would be called for this link.
>>>>
>>>> Thanks a lot,
>>>> Chris
>>>>
>>>> @Override
>>>> protected void populateItem(ListItem<String> item)
>>>> {
>>>> item.add(new EmptyPanel("icon").add(AttributeModifier.append("class",
>>>> "ui-icon " + JQueryIcon.ARROW_2_N_S)));
>>>> item.add(new Label("item", item.getModelObject()));
>>>> item.add(AttributeModifier.append("class", "ui-state-default"));
>>>> }
>>>>
>>>>
>>>>
>>>>
>>>>> Am 05.02.2015 um 14:30 schrieb Sebastien <[email protected]>:
>>>>>
>>>>> I've opened the issue:
>>>>> https://github.com/sebfz1/wicket-jquery-ui/issues/153
>>>>>
>>>>>
>>>>> On Thu, Feb 5, 2015 at 10:29 AM, Sebastien <[email protected]> wrote:
>>>>>
>>>>>> Hi Chris,
>>>>>>
>>>>>> Right, Sortable is processing events thought the Event Bus, that's
>>>> because
>>>>>> 2 sortables can be connected and then, these should be able to
>>>> communicate
>>>>>>
>>>>>> As you are sending the event from the Sortable, you enter the
>> condition:
>>>>>> if (event.getSource() instanceof Sortable<?>)
>>>>>>
>>>>>> I will try to find out how I can add a check, but as Sortable is
>> using a
>>>>>> generic model object (typeof T)...
>>>>>> I think the correct solution/workaround would be that you change the
>>>>>> broadcast type to EXACT, so Sortable#onEvent will not be triggered.
>>>>>>
>>>>>> Thanks & best regards,
>>>>>> Sebastien.
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Wed, Feb 4, 2015 at 8:55 PM, Chris <[email protected]> wrote:
>>>>>>
>>>>>>> Hi Sven, thanks.
>>>>>>>
>>>>>>> The onRemove method is from the class
>>>>>>> com.googlecode.wicket.jquery.ui.interaction.sortable.Sortable:
>>>>>>>
>>>>>>> @Override
>>>>>>> public void onRemove(AjaxRequestTarget target, String item) {
>>>>>>> super.onRemove(target, item);
>>>>>>> }
>>>>>>> Why is the payload processed in this method, as it takes the target
>> as
>>>>>>> parameter? Is there another way to render the other panel or rewrite
>>>> the
>>>>>>> payload?
>>>>>>>
>>>>>>> br, Chris
>>>>>>>
>>>>>>>
>>>>>>>> Am 04.02.2015 um 20:41 schrieb Sven Meier <[email protected]>:
>>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> you're using a DeleteItem as payload of the event:
>>>>>>>>
>>>>>>>> send(getPage(), Broadcast.BREADTH, new DeleteItem(target));
>>>>>>>>
>>>>>>>> Yet in #onRemove() you're casting the payload to a String:
>>>>>>>>
>>>>>>>> java.lang.ClassCastException: tripplanner.mycompany.DeleteItem
>>>>>>> cannot be cast to java.lang.String
>>>>>>>> at
>>>>>>> mycompany.panels.SuitcasePanel$1.onRemove(SuitcasePanel.java:54)
>>>>>>>>
>>>>>>>>
>>>>>>>> Regards
>>>>>>>> Sven
>>>>>>>>
>>>>>>>>
>>>>>>>> On 04.02.2015 20:32, Chris wrote:
>>>>>>>>> Hi Tobias - sorry, here it is:
>>>>>>>>>
>>>>>>>>> Last cause: mycompany.DeleteItem cannot be cast to java.lang.String
>>>>>>>>> WicketMessage: Method onRequest of interface
>>>>>>> org.apache.wicket.behavior.IBehaviorListener targeted at
>>>>>>>
>>>>
>> com.googlecode.wicket.jquery.ui.interaction.selectable.SelectableBehavior$1@127d9785
>>>>>>> on component [Sortable [Component id = sortable]] threw an exception
>>>>>>>>>
>>>>>>>>> Root cause:
>>>>>>>>>
>>>>>>>>> java.lang.ClassCastException: tripplanner.mycompany.DeleteItem
>> cannot
>>>>>>> be cast to java.lang.String
>>>>>>>>> at
>>>>>>> mycompany.panels.SuitcasePanel$1.onRemove(SuitcasePanel.java:54)
>>>>>>>>> at
>>>>>>>
>>>>
>> com.googlecode.wicket.jquery.ui.interaction.sortable.Sortable.onEvent(Sortable.java:126)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.wicket.settings.def.FrameworkSettings.dispatchEvent(FrameworkSettings.java:132)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.wicket.ComponentEventSender.dispatchToComponent(ComponentEventSender.java:282)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.wicket.ComponentEventSender.access$100(ComponentEventSender.java:36)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.wicket.ComponentEventSender$ComponentEventVisitor.component(ComponentEventSender.java:329)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.wicket.ComponentEventSender$ComponentEventVisitor.component(ComponentEventSender.java:306)
>>>>>>>>> at
>>>>>>> org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:144)
>>>>>>>>> at
>>>>>>> org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:162)
>>>>>>>>> at
>>>>>>> org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:162)
>>>>>>>>> at
>>>>>>> org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:123)
>>>>>>>>> at
>>>>>>> org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:192)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.wicket.MarkupContainer.visitChildren(MarkupContainer.java:875)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.wicket.ComponentEventSender.breadth(ComponentEventSender.java:160)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.wicket.ComponentEventSender.send(ComponentEventSender.java:68)
>>>>>>>>> at org.apache.wicket.Component.send(Component.java:4429)
>>>>>>>>> at
>>>>>>> mycompany.panels.SuitcasePanel$1$1.onSelect(SuitcasePanel.java:92)
>>>>>>>>> at
>>>>>>>
>>>>
>> com.googlecode.wicket.jquery.ui.interaction.selectable.SelectableBehavior.onAjax(SelectableBehavior.java:122)
>>>>>>>>> at
>>>>>>>
>>>>
>> com.googlecode.wicket.jquery.core.ajax.JQueryAjaxBehavior.respond(JQueryAjaxBehavior.java:171)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.wicket.ajax.AbstractDefaultAjaxBehavior.onRequest(AbstractDefaultAjaxBehavior.java:633)
>>>>>>>>> at java.lang.reflect.Method.invoke(Method.java:483)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:258)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:241)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.invokeListener(ListenerInterfaceRequestHandler.java:250)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.respond(ListenerInterfaceRequestHandler.java:236)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:862)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:261)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:218)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:289)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:259)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:201)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:137)
>>>>>>>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
>>>>>>>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>>>>>>>>> at
>>>>>>>
>> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:106)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.catalina.core.StandardHostValve.__invoke(StandardHostValve.java:142)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523)
>>>>>>>>> at
>>>>>>>
>>>>
>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>>>>>>>>> at
>>>>>>>
>>>>
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>>>>>>>>> at
>>>>>>>
>>>>
>> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
>>>>>>>>> at java.lang.Thread.run(Thread.java:745)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> br, Chris
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> Am 04.02.2015 um 20:09 schrieb Tobias Soloschenko <
>>>>>>> [email protected]>:
>>>>>>>>>>
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> would you be so kind and apply some more information like
>> StackTrace
>>>>>>> of the interal server error.
>>>>>>>>>>
>>>>>>>>>> Thanks a lot.
>>>>>>>>>>
>>>>>>>>>> kind regards
>>>>>>>>>>
>>>>>>>>>> Tobias.
>>>>>>>>>>
>>>>>>>>>> Am 04.02.15 um 20:05 schrieb Chris:
>>>>>>>>>>> Sven, I have an additional situation where I am getting an
>> internal
>>>>>>> error. Could you help me in figuring out the problem?
>>>>>>>>>>>
>>>>>>>>>>> Panel A senses the selection of an item from a user and adds the
>>>>>>> „sortable“ as container to the ajax target.
>>>>>>>>>>> In addition, Panel B should be added to the ajax target, using
>>>>>>> Wicket events.
>>>>>>>>>>>
>>>>>>>>>>> The internal error is thrown when using Wicket events to add the
>>>>>>> additional panel. Without the event, just calling
>>>> #target.add(sortable) it
>>>>>>> works.
>>>>>>>>>>>
>>>>>>>>>>> Panel A
>>>>>>>>>>> *************
>>>>>>>>>>> @Override
>>>>>>>>>>> public void onSelect(AjaxRequestTarget target, List<String>
>> items)
>>>> {
>>>>>>>>>>> sortable.onRemove(target, items.get(0));
>>>>>>>>>>> target.add(sortable);
>>>>>>>>>>> send(getPage(), Broadcast.BREADTH, new
>>>>>>> DeleteItem(target));
>>>>>>>>>>> }
>>>>>>>>>>> Panel B
>>>>>>>>>>> *************
>>>>>>>>>>> public class PoiListPanel extends Panel {
>>>>>>>>>>> @Override
>>>>>>>>>>> public void onEvent(IEvent<?> event) {
>>>>>>>>>>> super.onEvent(event);
>>>>>>>>>>>
>>>>>>>>>>> if (event.getPayload() instanceof DeleteItem) {
>>>>>>>>>>> DeleteItem update = (DeleteItem)
>>>>>>> event.getPayload();
>>>>>>>>>>> update.getTarget().add(this);
>>>>>>>>>>>
>>>>>>>>>>> }
>>>>>>>>>>>
>>>>>>>>>>> }
>>>>>>>>>>> Chris
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>> Am 04.02.2015 um 14:32 schrieb Grün Christoph <
>>>>>>> [email protected]>:
>>>>>>>>>>>>
>>>>>>>>>>>> Sven - thank you. That solved it!
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>> Am 04.02.2015 um 14:14 schrieb Sven Meier <[email protected]>:
>>>>>>>>>>>>>
>>>>>>>>>>>>> Your container has to output its markup id:
>>>>>>>>>>>>>
>>>>>>>>>>>>> container.setOutputMarkupId()
>>>>>>>>>>>>>
>>>>>>>>>>>>> Regards
>>>>>>>>>>>>> Sven
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> On 04.02.2015 14:11, Chris wrote:
>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> When the user clicks on a certain icon, a specific part of the
>>>>>>> page should be reloaded through ajax. The icon is part of a panel,
>> the
>>>>>>> specific part is a webmarkupcontainer added directly to the page. I
>> am
>>>>>>> using Wicket Events to push the click event. However, when adding the
>>>> web
>>>>>>> markup container as target, I am getting an internal error.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> -> update.getTarget().add(container);
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Can someone help me to fix this?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> *********************
>>>>>>>>>>>>>> ***** PANEL *****
>>>>>>>>>>>>>> final WebMarkupContainer suitcaseIcon = new
>>>>>>> WebMarkupContainer("icon");
>>>>>>>>>>>>>> icon.setOutputMarkupId(true);
>>>>>>>>>>>>>> icon.add(new AjaxEventBehavior("onclick") {
>>>>>>>>>>>>>> protected void onEvent(AjaxRequestTarget target) {
>>>>>>>>>>>>>> send(getPage(), Broadcast.BREADTH, new
>>>>>>> AddItem(target));
>>>>>>>>>>>>>> }
>>>>>>>>>>>>>> });
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> *********************
>>>>>>>>>>>>>> ***** PAGE *****
>>>>>>>>>>>>>> ...
>>>>>>>>>>>>>> WebMarkupContainer container;
>>>>>>>>>>>>>> public HomePage() {
>>>>>>>>>>>>>> container = new WebMarkupContainer("container");
>>>>>>>>>>>>>> add(container);
>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> @Override
>>>>>>>>>>>>>> public void onEvent(IEvent<?> event) {
>>>>>>>>>>>>>> super.onEvent(event);
>>>>>>>>>>>>>> if (event.getPayload() instanceof AddItem) {
>>>>>>>>>>>>>> AddItem update = (AddItem) event.getPayload();
>>>>>>>>>>>>>> update.getTarget().add(container);
>>>>>>>>>>>>>> }
>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> *********************
>>>>>>>>>>>>>> ***** AddItem *****
>>>>>>>>>>>>>> public class AddItem {
>>>>>>>>>>>>>> private final AjaxRequestTarget target;
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> public AddItem(AjaxRequestTarget target) {
>>>>>>>>>>>>>> this.target = target;
>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> public AjaxRequestTarget getTarget() {
>>>>>>>>>>>>>> return target;
>>>>>>>>>>>>>> }
>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thanks.
>>>>>>>>>>>>>> Chris
>>>>>>>>>>>>>
>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>>>> 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]
>>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>> ---------------------------------------------------------------------
>>>>>>>>>> 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]
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>
>>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>>