Wicket AjaxRequestTarget обратного вызова jQuery не является компонентом

0

Я пытаюсь реализовать обратный вызов jQuery AJAX для получения события сторонней библиотеки JavaScript.

И это почти срабатывает! :)

Сообщение jQuery AJAX является получателем на стороне сервера. URL-адрес обратного вызова генерируется AbstractDefaultAjaxBehavior, который был добавлен в Panel. В ответном методе Поведения я добавил дочерний компонент Panel к AjaxRequestTarget. Но это не перерисовывает компонент. Никакое исключение не выбрасывается, устанавливается выход oft markupId.

Есть идеи? Любая идея, где я могу найти компонент калитки, делающий что-то подобное в GitHub и т.д.

  • 0
    AjaxTabbedPanel - один из примеров расширений wicket. Если этого не произойдет, пожалуйста, опубликуйте свой код обработчика и создание соответствующей иерархии компонентов.
  • 1
    Вы используете $ .post (...) или Wicket.Ajax.post (...)? У метода записи калитки есть обработчик успеха, который перерисовывает компоненты (насколько я помню).
Показать ещё 2 комментария
Теги:
wicket
behavior
jquery-callback

1 ответ

0
Лучший ответ

Мое решение основано на комментариях выше. Простая метка для обновления через AjaxCallback:


    public class HomePage extends WebPage {

        private static final long serialVersionUID = 1L;

        private String value = "Hello World";

        public HomePage(final PageParameters parameters) {
            super(parameters);

            final Label label = new Label("label", new PropertyModel(HomePage.this, "value"));
            label.setOutputMarkupId(true);
            add(label);

            label.add(new DemoCallback(){
                @Override
                protected void onCallback(String fromClient, AjaxRequestTarget target) {
                    value = fromClient;
                    target.add(label);
                }
            }); 
        }
    }

Поведение, которое выполняет обратный вызов:

    public class DemoCallback extends AbstractDefaultAjaxBehavior {

        @Override
        public void renderHead(Component component, IHeaderResponse response) {
            super.renderHead(component, response);

            StringBuffer script = new StringBuffer();
            script.append("alert('Callback will follow!');\n");
            script.append("var dataForServer='From client with love.';\n");
            script.append(getCallbackFunctionBody(CallbackParameter
                    .explicit("dataForServer")));

            response.render(OnEventHeaderItem.forScript(
                    "'" + component.getMarkupId() + "'", "click", script.toString()));
        }

        @Override
        protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
            super.updateAjaxAttributes(attributes);
            attributes.setMethod(Method.POST);
        }

        @Override
        protected void respond(AjaxRequestTarget target) {
            StringValue parameterValue = RequestCycle.get().getRequest()
                    .getPostParameters().getParameterValue("dataForServer");
            onCallback(parameterValue.toString(), target);
        }

        protected void onCallback(String fromClient, AjaxRequestTarget target) {
            // overide to handle callback
        }
    }

Какая калитка делает в главном разделе:


    Wicket.Event.add('label1', "click", function(event) { 
        alert('Callback will follow!');
        var dataForServer='From client with love.';
        var attrs = {"u":"./?0-2.IBehaviorListener.0-label","c":"label1","m":"POST"};
        var params = {'dataForServer': dataForServer};
        attrs.ep = params;
        Wicket.Ajax.ajax(attrs);
    ;});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню