Davit mkrtchyan rich wicket presentation

12
1 CONFIDENTIAL Rich wicket Apache wicket extensions framework APRIL 4, 2015

Transcript of Davit mkrtchyan rich wicket presentation

Page 1: Davit mkrtchyan rich wicket presentation

1CONFIDENTIAL

Rich wicket

Apache wicket extensions framework

APRIL 4, 2015

Page 2: Davit mkrtchyan rich wicket presentation

2CONFIDENTIAL

Почему Wicket?

1. Open-source and free2. Быстрая разработка, Экономит время и деньги3. Apache wicket компонент ориентированный веб фреймворк 4. Поддержка наследование на уровне java и html markup. 5. Wicket наследует интерфейсы swing и awt. 6. Html markup не содержит логики, вся логика пишется в java

и js.

Page 3: Davit mkrtchyan rich wicket presentation

3CONFIDENTIAL

Основные компоненты Wicket

• WebPage – has markup• Panel – has markup• WebMarkupContainer• Behaviour• Form• IModel

Page 4: Davit mkrtchyan rich wicket presentation

4CONFIDENTIAL

WebPage & наследование

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html><html xmlns:wicket="http://wicket.apache.org"><head></head><body><div class="container"> <div wicket:id="header"></div> <wicket:child/> <div wicket:id="footer"></div></div></body></html>

public class BasePage extends WebPage {

public BasePage(PageParameters parameters) { super(parameters); add(new HeaderPanel("header")); add(new FooterPanel(“footer")); }}

BasePage.html BasePage.java

Page 5: Davit mkrtchyan rich wicket presentation

5CONFIDENTIAL

WebPage & наследование

public class HomePage extends BasePage {

public HomePage(PageParameters parameters) { super(parameters); }}

<?xml version="1.0" encoding="UTF-8"?><wicket:extend xmlns:wicket="http://wicket.apache.org"> <!--Home page content--></wicket:extend>

HomePage.html BasePage.java

Page 6: Davit mkrtchyan rich wicket presentation

6CONFIDENTIAL

Panel & наследование

<?xml version="1.0" encoding="UTF-8"?><wicket:panel xmlns:wicket="http://wicket.apache.org"> <!—Some base content-->

<wicket:child/>

<div wicket:id="somePanel"></div>

</wicket:panel>

public class BasePanel extends Panel {

public BasePanel(String id) { super(id); add(new SomePanel(“somePanel")); }}

public class HomePage extends BasePage {

public HomePage(PageParameters parameters) { super(parameters); add(new MyBehavior()); }}

<?xml version="1.0" encoding="UTF-8"?><wicket:extend xmlns:wicket="http://wicket.apache.org"> <!--Home page content--></wicket:extend>

BasePanel.html BasePanel.java

MyPanel.html MyPanel.java

Page 7: Davit mkrtchyan rich wicket presentation

7CONFIDENTIAL

Behavior

public class MyBehaviour extends Behavior {

@Override public void onConfigure(final Component component) { super.onConfigure(component); component.add(new AttributeAppender("style", Model.of("width:150px"), ";"));

component.add(new AjaxEventBehavior("click") { @Override protected void onEvent(AjaxRequestTarget target) { component.setDefaultModel(Model.of("clicked")); target.add(component); } }); }

@Override public void onComponentTag(Component component, ComponentTag tag) { super.onComponentTag(component, tag); tag.put("class", "clicked-class"); }}

Page 8: Davit mkrtchyan rich wicket presentation

8CONFIDENTIAL

Hmm… But what about js inheritance?

Page 9: Davit mkrtchyan rich wicket presentation

9CONFIDENTIAL

Why Rich Wicket

• Автоматическое включение javascript класса для wicket Panel (помимо html

markup), MarkupContainer, Behaviour• Автоматическое наследование js классов при наследовании wicket java

компонентов• Для каждого экземпляра wicket java класса создается его собственный

экземпляра js класса, устанавливается связь между ними• Получение модели wicket java компоненты в его js экземпляре

Page 10: Davit mkrtchyan rich wicket presentation

10CONFIDENTIAL

Как это работает?

public class MyPanel extends DcsPanel<MyModel> {

public MyPanel(String id, MyModel myModel) { super(id, myModel); }}

(function ($) { var MyPanel = window.DcsPanel.$extend({ __init__: function (modelObject, markupId) { this.$super(modelObject, markupId); }, onDomReady: function () { this.$super('onDomReady'); var _self = this; var myModel = this.modelObject; var $domElement = this.getComponent(); }); window.MyPanel = MyPanel;})(jQuery);

appendOnLoadJs("myMethod('stringVal')");

addAjaxPostLitenner("postButton", new AjaxPostEventListener<MyModel>(MyModel.class) {

@Override public Object actionWithCallback(MyModel pojo) { pojo.setValue("new new new value"); return pojo; } }); }

this.ajaxPost("postButton", myModel, new function(callbackPojo) { alert(callbackPojo.value);});

myMethod: function(value) { // do something with value}

Page 11: Davit mkrtchyan rich wicket presentation

11CONFIDENTIAL

Применение

• Разработана богатая библиотека wicket компонентов и поведений• Полная интеграция с twitter bootstrap• Ecommerce template

Page 12: Davit mkrtchyan rich wicket presentation

12CONFIDENTIAL

Спасибо

Давит Мкртчян