Синтаксическая ошибка приводит к пустой странице

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

Пример с полосами:
Test.html

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

Тест.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

Я изменил label-id на что-то отличное от того, что ожидает исходный файл.
Если я запускаю этот код, я получаю уже упомянутую пустую страницу.
Однако для каждого запроса на страницу с такой синтаксической ошибкой я получить отчет об ошибке в лог-файле около 1000+ строк. Этот отчет об ошибке, по сути, представляет собой сгенерированный калиткой HTML-код страницы с описанием ошибки.
Это заставляет меня задуматься, почему калитка не отображает информацию об ошибке вместо пустой страницы. У меня нет большого опыта работы с калиткой, но мне почему-то кажется, что у калитки возникают проблемы с отображением собственного кода страницы ошибок.

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

Заранее спасибо за то, что направили меня в правильном направлении :)

PS:
версия калитки: 1.4.9
стадия: разработка


person Philipp    schedule 18.06.2010    source источник


Ответы (2)


Я не могу подтвердить такое поведение. Я перешел на страницу 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.

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

person bert    schedule 21.06.2010
comment
Ага, нашел проблему. Я использую apache-ivy для разрешения зависимостей проектов. Это также вызовет wicket-1.4.9-javadoc.jar. Страница, которая используется для рендеринга отчета об ошибках, присутствует в обоих банках, но когда загрузчик классов ищет файл, он извлекает файл из банки javadoc. В результате этого рендеринга страница с ошибкой завершается сбоем, и я заканчиваю uf с пустой страницей. Теперь я занес javadoc.jar в черный список, чтобы он не копировался в каталог развертывания, чтобы извлекать правильную страницу ошибок. - person Philipp; 21.06.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», вы, по крайней мере, получите сбой теста, а не увидите его как часть сбойного приложения после развертывания.

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

person Don Roby    schedule 19.06.2010