[Logo] Форумы сайта Алтайлэнд
  [Search] Search   [Recent Topics] Recent Topics   [Hottest Topics] Hottest Topics   [Top Downloads] Top Downloads   [Members] Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
Разработка веб-приложений на Apache Wicket framework  XML
Forum Index » Разработка ПО
Author Message
Георгий Гуляев

[Avatar]

Joined: 23.05.2010 14:58:33
Messages: 62
Offline

Обсуждаем проблемы разработки на фреймворке Wicket: http://wicket.apache.org

Из того опыта, который у меня появился после переноса проекта aomai на Wicket, могу сформулировать выводы.

Плюсы в сравнении с jsf:

  • Полный контроль за выводом.
    В wicket пишем чистый html в отличие от jsf, где компоненты генерируются в конечный html без нашего участия.

  • Только html+css и Java.
    Нет посредников в виде тэгов jsf, языка EL и множества параметров в xml (созданный с целью упростить разработку
    для веб jsf плодит множество дополнительных сущностей, что в конечном счете усложняет его использование).

  • Эффективность.
    По некоторым оценкам скорость работы wicket приложения раз в 5 быстрее, чем аналогичного на jsf.

  • Минусы в сравнении с jsf:

  • Много кода на Java.
    От разработчика требуется более высокий уровень знания Java.


  • [WWW] [ICQ]
    Георгий Гуляев

    [Avatar]

    Joined: 23.05.2010 14:58:33
    Messages: 62
    Offline

    http://soft.altailand.ru/Index.jsp?id=15
    [WWW] [ICQ]
    mesier


    Joined: 12.12.2011 09:13:51
    Messages: 2
    Offline

    Недавно начал изучать wicket, ваш форум нашел через поиск.
    У меня есть вопрос к вам, как к специалисту..
    Есть страничка с двумя панелями и формой. В форме комбобох и кнопка. При смене строки из комбобоха мне надо бы обновить страницу (полностью, не Ajax) с загрузкой новых данный в панель 2. К сожалению ничего умнее перезагрузки страницы с новыми параметрами не придумал.
    Демо:
     	Form<?> form = new Form<Void>("form") {
                @Override
                protected void onSubmit() {
                    this.setResponsePage(HomePage.class, new PageParameters("owner=" + selected));
                }
            };
    

    При этом я заметил, что панели пересоздаются заново, в конструкторе панели 2 я обрабатываю параметр и формирую новые данные для вывода.
    А может можно как-то умнее сделать?
    Типа, в обработчике onSubmit обновить модель панели 2 и скормить панель RequestTarget ?
    Сам попытался что-то подобное изобразить, что-то не выходит и примеров толковых не могу к сожалению найти. А может плохо ищу..
    А как бы вы поступили в такой ситуации?
    (Напомню, что мне нужна полная перезагрузка страницы, не Аякс - с ним-то как раз проблем нет..)
    Георгий Гуляев

    [Avatar]

    Joined: 23.05.2010 14:58:33
    Messages: 62
    Offline

    Ну если нужно именно полностью всю страницу перегружать в запросе, то как-бы неважно каким способом Вы это сделаете - все будет пересоздаваться вновь. Можно какие-то объекты сохранять в сессии (например, значение индекса или даже весь комбобокс ), тогда при перезагрузке страницы можно восстанавливать сохраненные данные из сессии. То есть, из того что Вы написали не видно проблемы, поскольку неясно, что Вы собираетесь далее с этим делать.
    [WWW] [ICQ]
    mesier


    Joined: 12.12.2011 09:13:51
    Messages: 2
    Offline

    Георгий Гуляев wrote:Ну если нужно именно полностью всю страницу перегружать в запросе, то как-бы неважно каким способом Вы это сделаете - все будет пересоздаваться вновь.

    Ну, собственно, я пока и пытаюсь выяснить какие есть ещё способы, кроме того, что реализовал я?.
    Георгий Гуляев

    [Avatar]

    Joined: 23.05.2010 14:58:33
    Messages: 62
    Offline

    В стандарте протокола HTTP при ответе (response) на запрос (request) предусмотрена заголовочная часть header и в ней может быть поле location, отвечающее за переадресацию. Обновить страницу можно заполнив это поле ее адресом в response. Например, можно сделать это уже на клиенте в JavaScript:
     window.location = '/homepage.html'; 
    Веб-приложение на java обычно является сервлетом (wicket не исключение). В методы doGet и doPost класса сервлета (HttpServlet) передаются объекты HttpServletRequest request и HttpServletResponse response. У response можно переписать поле location:
    response.setHeader("Location", "homepage.html");
    У response также есть метод sendRedirect:
    response.sendRedirect("homepage.html");
    Вероятно, в нем просто вызовется setHeader("Location", "homepage.html") как и в сервлете wicket, когда Вы пишете setResponsePage(HomePage.class ...). Изнутри wicket Вы можете, конечно, попробовать добраться до response и вызвать один из этих методов, но это имеет смысл делать только для методов, к которым wicket не дает прямого доступа.
    [WWW] [ICQ]
     
    Forum Index » Разработка ПО
    Go to: