Не добавлять все компоненты при отображении ошибки в WICKET - PullRequest
2 голосов
/ 20 января 2011

У меня есть страница, которая принимает один аргумент.Если этот аргумент НЕ передан, то я хотел бы отобразить сообщение об ошибке («пожалуйста, передайте аргумент« бла »), которое будет показано в FeedBackPanel и выручить.Однако, если я не присоединяю все компоненты, вместо этого в wicket возникает ошибка, перенаправляющая клиента на страницу ошибок Wicket.

Есть ли способ отобразить сообщения об ошибках и НЕ добавлять все элементы на страницу?Некоторые из элементов - ListViews и т.д ...

Ответы [ 3 ]

3 голосов
/ 21 января 2011

Если контейнер не виден, он не проверяется на структурную согласованность (соответствие идентификаторам детей).Итак, просто оберните ваш контент в некоторый контейнер и вызовите container.setVisible (false), если параметр не передан.После этого вы можете немедленно вернуться, не добавляя своих детей. Wicket не будет жаловаться:

0 голосов
/ 20 января 2011

Я думаю, что Лорд Торгамус на правильном пути.

Я украл этот пример: http://apache -wicket.1842946.n4.nabble.com / Feedback-message-not-show-show-in-new-WebPage-td2993413.html

HTML-фрагмент

<div wicket:id="fbpnlFeedbackPanel"/>

Java-фрагмент

public MyPage(boolean failed)
{
    super();

    FeedbackPanel fbpnlFeedbackPanel = new FeedbackPanel("fbpnlFeedbackPanel");
    add(fbpnlFeedbackPanel);

    if (failed)
    {
        // MySession extends WebSession
        MySession ssnSession = (MySession)getSession();
        ssnSession.error("[Error text to put in FeedbackPanel] or use a model");
        ...
    }

    Form<?> frmForm = new Form<?>("frmForm")
    {
        ...
    }
    ...
}

Тот факт, чтоСеанс session.error () добавляет на страницу достаточно материала, чтобы знать, (а) показать панель обратной связи и (б) использовать предоставленный текст / модель на этой панели.

0 голосов
/ 20 января 2011

Самое простое решение - полностью отобразить другую страницу.

В противном случае вы можете использовать Panel, чтобы поместить все дополнительные компоненты.

Примерно так:

public MyPage( String param ) {
   if ( param != null ) {
     add( new MyPanel( "content", param ) );
   } else {
     add( new Label( "content", "" );
   }
}

И ваш html будет

<html>
   <body>
      !-- Feedback panel goes here -->
      ...

      <!-- Content panel goes here -->
      <wicket:container wicket:id="content"/>
   </body>
</html>

Вы также можете использовать `Fragment s, но я не рекомендую его, он не даст вам очень хороший код.

...