Синтаксическая ошибка приводит к пустой странице - PullRequest
0 голосов
/ 18 июня 2010

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

Пример в полоску:
Test.html

header stuff: doctype ... html ... head ... body ...
  <span wicket:id="msgTest" id="message">MSG</span>
footer stuff: /body ... /html

Test.java

public class Test extends WebPage {
    public Test() {
        add(new Label("msgTest", "Hello, World!"));
    }
}

Будет выведена страница, как и ожидалось.
Теперь давайте введем ошибку:

header stuff: doctype ... html ... head ... body ...
  <span wicket:id="msgTest2" id="message">MSG</span>
footer stuff: /body ... /html

Я изменил идентификатор метки на нечто отличное от того, что ожидает исходный файл.
Если я запускаю этот код, я получаю уже упомянутую пустую страницу.
Тем не менее, для каждого запроса к странице с такой синтаксической ошибкой я получаю сообщение об ошибке в лог-файле длиной более 1000 строк. Этот отчет об ошибках в основном представляет собой сгенерированный калиткой html страницы, которая описывает ошибку.
Это заставляет меня задуматься, почему в Wicket вместо пустой страницы не отображаются сообщения об ошибках. Я не очень разбираюсь в калитке, но мне кажется, что у калитки возникли проблемы с отображением собственного кода страницы ошибки.

Было бы неплохо узнать, как найти ошибки синтаксиса с помощью wicket.
Прочитать отчет об ошибке в 1000+ строк для маленькой ошибки, такой как неуместный символ, кажется немного утомительным.

Заранее благодарим за руководство в правильном направлении:)

PS:
калитка-версия: 1.4.9
Стадия: развитие

Ответы [ 2 ]

0 голосов
/ 21 июня 2010

Я не могу подтвердить это поведение. Я пошел к http://wicket.apache.org/quickstart.html и создал быстрый старт. Изменил идентификатор калитки с 'message' на 'message1' и получил хорошую описательную страницу в пристани:

WicketMessage: Unable to find component with id 'message' in [Page class = com.mycompany.HomePage, id = 0, version = 0]. This means that you declared wicket:id=message in your markup, but that you either did not add the component to your page at all, or that the hierarchy does not match.

Как вы создали свой проект?

0 голосов
/ 19 июня 2010

Что мне нравится делать, так это писать модульные тесты с WicketTester, по крайней мере, для проверки того, что они отображаются, и, как правило, также писать утверждения для проверки компонентов. Что-то вроде

@Test
public void testMessageLabel(
    WicketTester tester = new WicketTester();
    tester.startPage(Test.class);
    tester.assertLastRenderedPage(Test.class);
    tester.assertComponent("msgTest", Label.class);
    tester.assertLabel("msgTest", "Hello, World!");
)

Тогда, если, как в вашем примере, код содержит «msgTest», а html содержит «msgTest2», вы по крайней мере получаете тестовый сбой вместо того, чтобы видеть его как часть сбойного приложения после развертывания.

Это, конечно, не полное решение, так как эта ошибка приведет к сбою любого теста рендеринга страницы, а конкретный сбой просто выдаст длинное сообщение об ошибке в результате теста, но, по крайней мере, вам не нужно искать файлы журнала. ,

...