Значение поля выдачи калитки никогда не использовалось - PullRequest
1 голос
/ 04 июля 2019

Очень плохо знаком с Wicket, но имеет очень простую Java.Я не понимаю, как «результат» не использовался, так как я использовал его в функции AjaxButton

Quickfix говорит, чтобы обеспечить получение и установщик, который я сделал (удалил сейчас), но все же ничего не произошло, когдаЯ нажимаю кнопку ОК

CalcPage.java:

public class CalcPage extends WebPage{
    private int num;
    private int result; // error:The value of the field CalcPage.result is not used
    private Label r;

    public CalcPage() {
        Form<Void> f = new Form<Void>("f");
        add(f);
        f.add(new TextField<Integer>("num", new PropertyModel<Integer>(this, "num")));
        AjaxButton ok = new AjaxButton("ok") {
            @Override
            protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                result = 2 * num;
                target.add(r);
            }
            @Override
            protected void onError(AjaxRequestTarget target, Form<?> form) {

            }
        };
        f.add(ok);
        r = new Label("r", new PropertyModel<Integer>(this, "result"));
        add(r);
    }
}

CalcPage.html

<html xmlns:wicket="http://wicket.apache.org">
    <head>
        <meta charset="utf-8" />
        <title>Apache Wicket Quickstart</title>
        <link href='https://fonts.googleapis.com/css?family=Yanone+Kaffeesatz:regular,bold' rel='stylesheet' type='text/css' />
        <link rel="stylesheet" href="style.css" type="text/css" media="screen" title="Stylesheet" />
    </head>
    <body>
        <form wicket:id="f">
            <input type="text" wicket:id="num"/>
            <input type="submit" value="OK" wicket:id="ok"/>
        </form>
        Result: <span wicket:id="r"></span>
    </body>
</html>

Надеясь (в соответствии с книгой «Использование веб-разработки с Wicket»), чтобы удвоитьввод, но когда я нажимаю на OK, и ничего не происходит.

Также в коде я получаю ошибку компиляции с @Override, как только это будет удалено, я могу скомпилировать и загрузить веб-страницу.Связаны ли они ??

Информация окна отладки Ajax Wicket: INFO: фокус удален из

INFO: фокус установлен на

INFO: фокус удален из

INFO: фокус установлен на wicketDebugLink

INFO: фокус удален из wicketDebugLink

INFO: фокус установлен на ok2

INFO: Получен ответ Ajax (69 символов)

INFO:

INFO: Ответ обработан успешно.

INFO: перефокусировать последний выделенный компонент не нужно / разрешено

ETA Я изменил с частного на публичный, и эта ошибка исчезла, нонажатие ok все еще не работает, и появилась новая ошибка: метод onSubmit (AjaxRequestTarget, Form) из типа new AjaxButton () {} никогда не используется локально

Ответы [ 2 ]

2 голосов
/ 04 июля 2019

Вам нужно позвонить r.setOutputMarkupId(true), если вы хотите обновить Компонент через Ajax.

1) если javac (или ваша IDE) говорит, что @Override ничего не отменяет, то, скорее всего, у вас естьопечатка где-нибудь, и вам нужно это исправить, т.е. чтобы правильно переопределить метод из super

2) никогда не оставляйте #onError() пустым.Как минимум добавьте в него некоторые базовые записи, чтобы уведомить вас об ошибке проверки.Может быть, #onSubmit() вообще не вызывается.Лучше всего иметь панель обратной связи на странице, и вы должны обновить ее в #onError() - target.add(feedbackPanel)

3) Проверьте консоль инструментов разработчика браузера на наличие ошибок JavaScript.Я ожидаю, что Wicket будет жаловаться, что не может найти HTML-элемент с идентификатором rXY (где XY - число) из-за отсутствия r.setOutputMarkupId(true)

0 голосов
/ 05 июля 2019

Версия 8 калитки не имеет параметра "form", поэтому его можно удалить:

новый код

AjaxButton ok = new AjaxButton("ok") {

        @Override
        protected void onSubmit(AjaxRequestTarget target) {
            result= 2*num;
            target.add(r);
        }
...