SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Downloaden Sie, um offline zu lesen
APACHE CLICK
Easy & Simple to Learn
POJO Based Lightweight Framework
Event Based Programming model
Servlet Requests &Velocity for rendering the response
JSP, Freemarker, Spring, Hibernate Etc.. Support
Apache Click
No New Feature
Easy, Simple
Fast to Development
Auto Create HTML
Recommend for Prototyping, Management tools
Recommendation
Page
Control
Container
Configurations, Properties
Apache Click Framework
APACHE CLICK
PAGE
public class SimplePage extends Page {	
	
	 public SimplePage() {
	 	 addModel("time", new Date());
	 }	
}
SimplePage.java
<html>
	 <body>
	 	 Time : $time
	 </body>
</html>
SimplePage.htm
Page
public class SimplePage extends Page {	
	
	 public SimplePage() {
	 	 addModel("time", new Date());
	 }	
}
SimplePage.java
public class SimplePage extends Page {	
	 @Bindable protected Date time = new Date();
}
SimplePage.java
<html>
	 <body>
	 	 Time : $time
	 </body>
</html>
SimplePage.htm
Page -Velocity
public class SimplePage extends Page {	
	
	 public SimplePage() {
getHeadElements().add(new JsImport("/static/js/simplepage.js"));
	 	 getHeadElements().add(new JsScript("alert('Welcome to SimplePage');"));
	 	 getHeadElements().add(new CssImport("/static/css/simplepage.css"));
	 	 getHeadElements().add(new CssStyle("body { font-family: Verdana; }"));
	 	 setStateful(true);
	 }
	
	 @Override
	 public void onInit() {
	 	 super.onInit();
	 }
	
	 @Override
	 public void onGet() {
	 	 super.onGet();
	 }
	
	 @Override
	 public void onPost() {
	 	 super.onPost();
	 }
	
	 @Override
	 public void onRender() {
	 	 super.onRender();
	 }
	
	 @Override
	 public void onDestroy() {
	 	 super.onDestroy();
	 }
	
}
ClickServlet.handleRequest()
Page.onInit()
in session?
Page.onGet() Page.onPost()
Page.onRender()
Page.onDistory()
new Page
setSession removeSession
get post
is stateful ?
HTTP Request
HTTP Response
SimplePage.java
Page -Velocity
<html>
	 <head>
	 	 $headElements
	 </head>
	 <body>
	 	 $jsElements
	 </body>
</html>
SimplePage.htm
Page -Velocity
APACHE CLICK
CONFIGURATIONS
Configurations
	 <servlet>
	 	 <servlet-name>ClickServlet</servlet-name>
	 	 <servlet-class>org.apache.click.ClickServlet</servlet-class>
	 	 <load-on-startup>0</load-on-startup>
	 </servlet>
	 <servlet-mapping>
	 	 <servlet-name>ClickServlet</servlet-name>
	 	 <url-pattern>/*</url-pattern>
	 </servlet-mapping>
web.xml
automappingListPage.htm
listPage.htm
list_page.htm
list-page.htm
list.htm
List.htm
Configurations
<?xml version="1.0" encoding="UTF-8"?>
<click-app charset="UTF-8" locale="ko">
	 <pages package="net.daum.cafe.moa.page"/>
</click-app>
click.xml
net.daum.cafe.moa.page.ListPage.java
Configurations
<?xml version="1.0" encoding="UTF-8"?>
<click-app charset="UTF-8" locale="ko">
	 <pages package="net.daum.cafe.moa.page" automapping="false">
	 	 <page path="index.htm"	 classname="Home"/>
	 	 <page path="login/login.htm" classname="Login">
	 	 	 <header name="Cache-Control" value="max-age=3600, public, must-revalidate"/>
	 	 </page>
	 	 <excludes pattern="static/*" />
	 </pages>
</click-app>
click.xml
index.htm net.daum.cafe.moa.page.HomePage.java
login/login.htm net.daum.cafe.moa.page.LoginPage.java
APACHE CLICK
CONTAINER
public class SimpleTable extends Page {
@Bindable protected Table table;
	
public SimpleTable(){
	 	 table = new Table();	 	
	 	 table.setAttribute("style", "font-family:Gulim; font-size:12px;");
	 	
	 	 table.setPageSize(10);
	 	 table.setShowBanner(true);
	 	 table.setSortable(true);
	 	 	 	
	 	 Column cafeColumn = new Column("grpname", "카페");
	 	 cafeColumn.setMaxLength(10);
	 	 cafeColumn.setAutolink(true);
	 	 cafeColumn.setSortable(true);
	 	
	 	 table.addColumn(new Column("id", "id"));
	 	 table.addColumn(cafeColumn);	 	
}
@Override
public void onGet() {
	table.setDataProvider(new DataProvider<Article>() {
	 	 @Override
		 public Iterable<Article> getData() {
.....
		 }
	});
}
}
SimpleTable.java
<html>
	 <head>
	 	 $headElements
	 </head>
	 <body>
	 	 $table
$jsElements
	 </body>
</html>
SimpleTable.htm
Container -Table
Container -Table
Container -Table
@Bindable protected ActionLink deleteLink = new ActionLink("Delete", this, "onDeleteClick");
	 public SimplePage(){
	 	 table = new Table();
table.setClass(Table.CLASS_REPORT);
......
	 	 deleteLink.setAttribute("onclick", "return window.confirm('정말 삭제하시겠습니까?')");
	 	 Column column = new Column("Delete");
	 	 column.setDecorator(new LinkDecorator(table, deleteLink, "id"));
	 	 table.addColumn(column);
}
public void onDeleteClick(){
String id = deleteLink.getValue();
delete(id);
}
SimpleTable.java
Container -Table
Container - Form
public class SimpleForm extends Page {
	
	 @Bindable protected Form form = new Form();
	
public SimpleForm(){
	form.setMethod("GET");
	form.setAttribute("style", "font-family:Gulim; font-size:10px;");
	
	FieldSet fieldSet = new FieldSet("심플 폼");
	fieldSet.setColumns(2);
	fieldSet.add(new TextField("name", true));
	fieldSet.add(new EmailField("emailField", true));
	fieldSet.add(new ColorPicker("Color"));
	fieldSet.add(new DateField("dateField"));
	fieldSet.add(new NumberField("numberField"));
	fieldSet.add(new DoubleField("doubleField"));
	fieldSet.add(new TelephoneField("telephoneField"));
	fieldSet.add(new VirtualKeyboard("keyboardField"));
	fieldSet.add(new CountrySelect("countrySelect"));
	fieldSet.add(new Submit("OK"));
	fieldSet.setListener(this, "onSubmit");
	
	form.add(fieldSet);
}
	
	 public boolean onSubmit(){
	 	 if(form.isValid()){
	 	 	 .....
	 	 }
	 	 return true;
	 }
	
}
SimpleForm.java
Container - Form
Container - Form
APACHE CLICK
CONTROL
Control
Control
Color Picker
Calendar
Control
Vertual KeyboardContury Select
Control (3rd Party)
Click Charts
Control (3rd Party)
Click Click
Control (3rd Party)
http://code.google.com/p/clickclick/
http://code.google.com/p/click-jquery/
http://code.google.com/p/click-calendar/
http://code.google.com/p/chainer/
http://code.google.com/p/click-charts/
Click Click
Click jQuery
Click Calendar
Chainer
Click Chart
APACHE CLICK
PROPERTIES
field-maxlength-error={0} must be no longer than {1} characters
field-minlength-error={0} must be at least {1} characters
field-required-error=You must enter a value for {0}
file-required-error=You must enter a filename for {0}
label-required-prefix=
label-required-suffix=<span class="required">*</span>
label-not-required-prefix=
label-not-required-suffix=&nbsp;
not-checked-error=You must select {0}
number-maxvalue-error={0} must not be larger than {1}
number-minvalue-error={0} must not be smaller than {1}
select-error=You must select a value for {0}
table-first-label=First
table-first-title=Go to first page
table-previous-label=Prev
table-previous-title=Go to previous page
table-next-label=Next
table-next-title=Go to next page
table-last-label=Last
table-last-title=Go to last page
table-goto-title=Go to page
table-page-banner=<span class="pagebanner">{0} items found, displaying {1} to {2}.</span>
table-page-banner-nolinks=<span class="pagebanner-nolinks">{0} items found, displaying {1} to {2}.</span>
table-page-links=<span class="pagelinks">[{0}/{1}] {2} [{3}/{4}]</span>
table-page-links-nobanner=<span class="pagelinks-nobanner">[{0}/{1}] {2} [{3}/{4}]</span>
table-no-rows-found=No records found.
table-inline-first-image=/click/paging-first.gif
table-inline-first-disabled-image=/click/paging-first-disabled.gif
table-inline-previous-image=/click/paging-prev.gif
table-inline-previous-disabled-image=/click/paging-prev-disabled.gif
table-inline-next-image=/click/paging-next.gif
table-inline-next-disabled-image=/click/paging-next-disabled.gif
table-inline-last-image=/click/paging-last.gif
table-inline-last-disabled-image=/click/paging-last-disabled.gif
table-inline-page-links=Page	 {0} {1} {2} {3} {4}
production-error-message=<div id='errorReport' class='errorReport'>The application encountered an unexpected error. </div>
Message Properties
Page scope messages :
Global scope messages :
Control scope messages :
Global Control scope messages :
/package/Page.properties
/click-page.properties
/package/CustomControl.properties
/click-control.properties
Message Properties
APACHE CLICK
EXAMPLES
http://www.avoka.com/click-examples/home.htm
Examples
APACHE CLICK
THANKYOU

Weitere ähnliche Inhalte

Was ist angesagt?

Python Code Camp for Professionals 1/4
Python Code Camp for Professionals 1/4Python Code Camp for Professionals 1/4
Python Code Camp for Professionals 1/4DEVCON
 
The Enterprise Wor/d/thy/Press
The Enterprise Wor/d/thy/PressThe Enterprise Wor/d/thy/Press
The Enterprise Wor/d/thy/PressJeroen van Dijk
 
OSCON Google App Engine Codelab - July 2010
OSCON Google App Engine Codelab - July 2010OSCON Google App Engine Codelab - July 2010
OSCON Google App Engine Codelab - July 2010ikailan
 
WordPress REST API hacking
WordPress REST API hackingWordPress REST API hacking
WordPress REST API hackingJeroen van Dijk
 
Flask - Backend com Python - Semcomp 18
Flask - Backend com Python - Semcomp 18Flask - Backend com Python - Semcomp 18
Flask - Backend com Python - Semcomp 18Lar21
 
Python Code Camp for Professionals 2/4
Python Code Camp for Professionals 2/4Python Code Camp for Professionals 2/4
Python Code Camp for Professionals 2/4DEVCON
 
Oracle APEX Performance
Oracle APEX PerformanceOracle APEX Performance
Oracle APEX PerformanceScott Wesley
 
WordPress REST API hacking
WordPress REST API hackingWordPress REST API hacking
WordPress REST API hackingJeroen van Dijk
 
Power Shell and Sharepoint 2013
Power Shell and Sharepoint 2013Power Shell and Sharepoint 2013
Power Shell and Sharepoint 2013Mohan Arumugam
 
Introduction to windows power shell in sharepoint 2010
Introduction to windows power shell in sharepoint 2010Introduction to windows power shell in sharepoint 2010
Introduction to windows power shell in sharepoint 2010Binh Nguyen
 
4 introduction-php-mvc-cakephp-m4-controllers-slides
4 introduction-php-mvc-cakephp-m4-controllers-slides4 introduction-php-mvc-cakephp-m4-controllers-slides
4 introduction-php-mvc-cakephp-m4-controllers-slidesMasterCode.vn
 
A Little Backbone For Your App
A Little Backbone For Your AppA Little Backbone For Your App
A Little Backbone For Your AppLuca Mearelli
 
The Enterprise Wor/d/thy/Press
The Enterprise Wor/d/thy/PressThe Enterprise Wor/d/thy/Press
The Enterprise Wor/d/thy/PressJeroen van Dijk
 
3 introduction-php-mvc-cakephp-m3-getting-started-slides
3 introduction-php-mvc-cakephp-m3-getting-started-slides3 introduction-php-mvc-cakephp-m3-getting-started-slides
3 introduction-php-mvc-cakephp-m3-getting-started-slidesMasterCode.vn
 
15.exemplu complet eloquent view add-edit-delete-search
15.exemplu complet eloquent view add-edit-delete-search15.exemplu complet eloquent view add-edit-delete-search
15.exemplu complet eloquent view add-edit-delete-searchRazvan Raducanu, PhD
 
LvivPy - Flask in details
LvivPy - Flask in detailsLvivPy - Flask in details
LvivPy - Flask in detailsMax Klymyshyn
 

Was ist angesagt? (20)

Python Code Camp for Professionals 1/4
Python Code Camp for Professionals 1/4Python Code Camp for Professionals 1/4
Python Code Camp for Professionals 1/4
 
The Enterprise Wor/d/thy/Press
The Enterprise Wor/d/thy/PressThe Enterprise Wor/d/thy/Press
The Enterprise Wor/d/thy/Press
 
OSCON Google App Engine Codelab - July 2010
OSCON Google App Engine Codelab - July 2010OSCON Google App Engine Codelab - July 2010
OSCON Google App Engine Codelab - July 2010
 
WordPress REST API hacking
WordPress REST API hackingWordPress REST API hacking
WordPress REST API hacking
 
Flask - Backend com Python - Semcomp 18
Flask - Backend com Python - Semcomp 18Flask - Backend com Python - Semcomp 18
Flask - Backend com Python - Semcomp 18
 
Kyiv.py #17 Flask talk
Kyiv.py #17 Flask talkKyiv.py #17 Flask talk
Kyiv.py #17 Flask talk
 
Python Code Camp for Professionals 2/4
Python Code Camp for Professionals 2/4Python Code Camp for Professionals 2/4
Python Code Camp for Professionals 2/4
 
Oracle APEX Performance
Oracle APEX PerformanceOracle APEX Performance
Oracle APEX Performance
 
WordPress REST API hacking
WordPress REST API hackingWordPress REST API hacking
WordPress REST API hacking
 
Power Shell and Sharepoint 2013
Power Shell and Sharepoint 2013Power Shell and Sharepoint 2013
Power Shell and Sharepoint 2013
 
Flask – Python
Flask – PythonFlask – Python
Flask – Python
 
Introduction to windows power shell in sharepoint 2010
Introduction to windows power shell in sharepoint 2010Introduction to windows power shell in sharepoint 2010
Introduction to windows power shell in sharepoint 2010
 
4 introduction-php-mvc-cakephp-m4-controllers-slides
4 introduction-php-mvc-cakephp-m4-controllers-slides4 introduction-php-mvc-cakephp-m4-controllers-slides
4 introduction-php-mvc-cakephp-m4-controllers-slides
 
A Little Backbone For Your App
A Little Backbone For Your AppA Little Backbone For Your App
A Little Backbone For Your App
 
CakePHP
CakePHPCakePHP
CakePHP
 
18.register login
18.register login18.register login
18.register login
 
The Enterprise Wor/d/thy/Press
The Enterprise Wor/d/thy/PressThe Enterprise Wor/d/thy/Press
The Enterprise Wor/d/thy/Press
 
3 introduction-php-mvc-cakephp-m3-getting-started-slides
3 introduction-php-mvc-cakephp-m3-getting-started-slides3 introduction-php-mvc-cakephp-m3-getting-started-slides
3 introduction-php-mvc-cakephp-m3-getting-started-slides
 
15.exemplu complet eloquent view add-edit-delete-search
15.exemplu complet eloquent view add-edit-delete-search15.exemplu complet eloquent view add-edit-delete-search
15.exemplu complet eloquent view add-edit-delete-search
 
LvivPy - Flask in details
LvivPy - Flask in detailsLvivPy - Flask in details
LvivPy - Flask in details
 

Andere mochten auch

Exploración de explotación minera
Exploración de explotación mineraExploración de explotación minera
Exploración de explotación minerafigempa uce
 
Hilary Clinton Used Personal Email for Official Government Business! - theDBZ...
Hilary Clinton Used Personal Email for Official Government Business! - theDBZ...Hilary Clinton Used Personal Email for Official Government Business! - theDBZ...
Hilary Clinton Used Personal Email for Official Government Business! - theDBZ...Alison Howen
 
2016 gada plāns
2016 gada plāns2016 gada plāns
2016 gada plānsnikoolaaaa
 
Ambiental Problemas del mundo contemporaneo
Ambiental Problemas del mundo contemporaneoAmbiental Problemas del mundo contemporaneo
Ambiental Problemas del mundo contemporaneofigempa uce
 
Software aplicado a la geologìa
Software aplicado a la geologìaSoftware aplicado a la geologìa
Software aplicado a la geologìafigempa uce
 
Smart Phone CPU
Smart Phone CPUSmart Phone CPU
Smart Phone CPU오석 한
 
Petsil petrofisica
Petsil petrofisicaPetsil petrofisica
Petsil petrofisicafigempa uce
 
Ambiental Matematica i
Ambiental Matematica iAmbiental Matematica i
Ambiental Matematica ifigempa uce
 
Minas Geologia del ecuador
Minas Geologia del ecuadorMinas Geologia del ecuador
Minas Geologia del ecuadorfigempa uce
 
Petsil estadistica
Petsil estadisticaPetsil estadistica
Petsil estadisticafigempa uce
 
Petsil estadisticaaplicada
Petsil estadisticaaplicadaPetsil estadisticaaplicada
Petsil estadisticaaplicadafigempa uce
 
Petsil fisquimtermo
Petsil fisquimtermoPetsil fisquimtermo
Petsil fisquimtermofigempa uce
 
Geología general
Geología generalGeología general
Geología generalfigempa uce
 
Minas Mecánica de rocas 2
Minas Mecánica de rocas 2Minas Mecánica de rocas 2
Minas Mecánica de rocas 2figempa uce
 
บทคัดย่อรายงานการพัฒนาคู่มือการนิเทศการพัฒนาสถานศึกษาสู่สถานศึกษาพอเพียง
บทคัดย่อรายงานการพัฒนาคู่มือการนิเทศการพัฒนาสถานศึกษาสู่สถานศึกษาพอเพียงบทคัดย่อรายงานการพัฒนาคู่มือการนิเทศการพัฒนาสถานศึกษาสู่สถานศึกษาพอเพียง
บทคัดย่อรายงานการพัฒนาคู่มือการนิเทศการพัฒนาสถานศึกษาสู่สถานศึกษาพอเพียงNirut Uthatip
 

Andere mochten auch (19)

Exploración de explotación minera
Exploración de explotación mineraExploración de explotación minera
Exploración de explotación minera
 
Love Story Visual Narrative
Love Story Visual NarrativeLove Story Visual Narrative
Love Story Visual Narrative
 
Hilary Clinton Used Personal Email for Official Government Business! - theDBZ...
Hilary Clinton Used Personal Email for Official Government Business! - theDBZ...Hilary Clinton Used Personal Email for Official Government Business! - theDBZ...
Hilary Clinton Used Personal Email for Official Government Business! - theDBZ...
 
2016 gada plāns
2016 gada plāns2016 gada plāns
2016 gada plāns
 
Ambiental Problemas del mundo contemporaneo
Ambiental Problemas del mundo contemporaneoAmbiental Problemas del mundo contemporaneo
Ambiental Problemas del mundo contemporaneo
 
Software aplicado a la geologìa
Software aplicado a la geologìaSoftware aplicado a la geologìa
Software aplicado a la geologìa
 
Smart Phone CPU
Smart Phone CPUSmart Phone CPU
Smart Phone CPU
 
Petsil petrofisica
Petsil petrofisicaPetsil petrofisica
Petsil petrofisica
 
Ambiental Matematica i
Ambiental Matematica iAmbiental Matematica i
Ambiental Matematica i
 
Coplas de ciencias
Coplas de cienciasCoplas de ciencias
Coplas de ciencias
 
Minas Geologia del ecuador
Minas Geologia del ecuadorMinas Geologia del ecuador
Minas Geologia del ecuador
 
Petsil quimica1
Petsil quimica1Petsil quimica1
Petsil quimica1
 
Petsil estadistica
Petsil estadisticaPetsil estadistica
Petsil estadistica
 
Petsil estadisticaaplicada
Petsil estadisticaaplicadaPetsil estadisticaaplicada
Petsil estadisticaaplicada
 
Petsil fisquimtermo
Petsil fisquimtermoPetsil fisquimtermo
Petsil fisquimtermo
 
Geología general
Geología generalGeología general
Geología general
 
Minas Mecánica de rocas 2
Minas Mecánica de rocas 2Minas Mecánica de rocas 2
Minas Mecánica de rocas 2
 
บทคัดย่อรายงานการพัฒนาคู่มือการนิเทศการพัฒนาสถานศึกษาสู่สถานศึกษาพอเพียง
บทคัดย่อรายงานการพัฒนาคู่มือการนิเทศการพัฒนาสถานศึกษาสู่สถานศึกษาพอเพียงบทคัดย่อรายงานการพัฒนาคู่มือการนิเทศการพัฒนาสถานศึกษาสู่สถานศึกษาพอเพียง
บทคัดย่อรายงานการพัฒนาคู่มือการนิเทศการพัฒนาสถานศึกษาสู่สถานศึกษาพอเพียง
 
Smart work
Smart workSmart work
Smart work
 

Ähnlich wie Apache Click

Bare-knuckle web development
Bare-knuckle web developmentBare-knuckle web development
Bare-knuckle web developmentJohannes Brodwall
 
ASP.NET Overview - Alvin Lau
ASP.NET Overview - Alvin LauASP.NET Overview - Alvin Lau
ASP.NET Overview - Alvin LauSpiffy
 
Integrating Wicket with Java EE 6
Integrating Wicket with Java EE 6Integrating Wicket with Java EE 6
Integrating Wicket with Java EE 6Michael Plöd
 
ActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group PresentationActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group Presentationipolevoy
 
SharePoint Administration with PowerShell
SharePoint Administration with PowerShellSharePoint Administration with PowerShell
SharePoint Administration with PowerShellEric Kraus
 
Backbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVCBackbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVCpootsbook
 
Unit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBeneluxUnit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBeneluxMichelangelo van Dam
 
Testing persistence in PHP with DbUnit
Testing persistence in PHP with DbUnitTesting persistence in PHP with DbUnit
Testing persistence in PHP with DbUnitPeter Wilcsinszky
 
Unit testing with zend framework tek11
Unit testing with zend framework tek11Unit testing with zend framework tek11
Unit testing with zend framework tek11Michelangelo van Dam
 
Summer - The HTML5 Library for Java and Scala
Summer - The HTML5 Library for Java and ScalaSummer - The HTML5 Library for Java and Scala
Summer - The HTML5 Library for Java and Scalarostislav
 

Ähnlich wie Apache Click (20)

Bare-knuckle web development
Bare-knuckle web developmentBare-knuckle web development
Bare-knuckle web development
 
ASP.NET Overview - Alvin Lau
ASP.NET Overview - Alvin LauASP.NET Overview - Alvin Lau
ASP.NET Overview - Alvin Lau
 
Integrating Wicket with Java EE 6
Integrating Wicket with Java EE 6Integrating Wicket with Java EE 6
Integrating Wicket with Java EE 6
 
Struts Overview
Struts OverviewStruts Overview
Struts Overview
 
Jsp Notes
Jsp NotesJsp Notes
Jsp Notes
 
JSP
JSPJSP
JSP
 
Introduction to Html5
Introduction to Html5Introduction to Html5
Introduction to Html5
 
ActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group PresentationActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group Presentation
 
SharePoint Administration with PowerShell
SharePoint Administration with PowerShellSharePoint Administration with PowerShell
SharePoint Administration with PowerShell
 
Php frameworks
Php frameworksPhp frameworks
Php frameworks
 
Nativescript angular
Nativescript angularNativescript angular
Nativescript angular
 
Html5 For Jjugccc2009fall
Html5 For Jjugccc2009fallHtml5 For Jjugccc2009fall
Html5 For Jjugccc2009fall
 
Unit testing zend framework apps
Unit testing zend framework appsUnit testing zend framework apps
Unit testing zend framework apps
 
Backbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVCBackbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVC
 
Unit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBeneluxUnit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBenelux
 
Vaadin7
Vaadin7Vaadin7
Vaadin7
 
Testing persistence in PHP with DbUnit
Testing persistence in PHP with DbUnitTesting persistence in PHP with DbUnit
Testing persistence in PHP with DbUnit
 
Framework
FrameworkFramework
Framework
 
Unit testing with zend framework tek11
Unit testing with zend framework tek11Unit testing with zend framework tek11
Unit testing with zend framework tek11
 
Summer - The HTML5 Library for Java and Scala
Summer - The HTML5 Library for Java and ScalaSummer - The HTML5 Library for Java and Scala
Summer - The HTML5 Library for Java and Scala
 

Mehr von 오석 한

Serialization (Avro, Message Pack, Kryo)
Serialization (Avro, Message Pack, Kryo)Serialization (Avro, Message Pack, Kryo)
Serialization (Avro, Message Pack, Kryo)오석 한
 
Functional progrmming with scala
Functional progrmming with scalaFunctional progrmming with scala
Functional progrmming with scala오석 한
 
예제로 쉽게 배우는 Log4j 기초 활용법
예제로 쉽게 배우는 Log4j 기초 활용법예제로 쉽게 배우는 Log4j 기초 활용법
예제로 쉽게 배우는 Log4j 기초 활용법오석 한
 
Vi 단축키명령어
Vi 단축키명령어Vi 단축키명령어
Vi 단축키명령어오석 한
 
Perl Script Document
Perl Script DocumentPerl Script Document
Perl Script Document오석 한
 
정규 표현식 기본 메타문자 요약
정규 표현식 기본 메타문자 요약정규 표현식 기본 메타문자 요약
정규 표현식 기본 메타문자 요약오석 한
 
정규표현식의 이해와 활용
정규표현식의 이해와 활용정규표현식의 이해와 활용
정규표현식의 이해와 활용오석 한
 

Mehr von 오석 한 (13)

Smart work
Smart workSmart work
Smart work
 
RPC protocols
RPC protocolsRPC protocols
RPC protocols
 
Serialization (Avro, Message Pack, Kryo)
Serialization (Avro, Message Pack, Kryo)Serialization (Avro, Message Pack, Kryo)
Serialization (Avro, Message Pack, Kryo)
 
Cassandra
CassandraCassandra
Cassandra
 
Functional progrmming with scala
Functional progrmming with scalaFunctional progrmming with scala
Functional progrmming with scala
 
Linux tips
Linux tipsLinux tips
Linux tips
 
JAVA NIO
JAVA NIOJAVA NIO
JAVA NIO
 
예제로 쉽게 배우는 Log4j 기초 활용법
예제로 쉽게 배우는 Log4j 기초 활용법예제로 쉽게 배우는 Log4j 기초 활용법
예제로 쉽게 배우는 Log4j 기초 활용법
 
Vi 단축키명령어
Vi 단축키명령어Vi 단축키명령어
Vi 단축키명령어
 
Perl Script Document
Perl Script DocumentPerl Script Document
Perl Script Document
 
Perl Script
Perl ScriptPerl Script
Perl Script
 
정규 표현식 기본 메타문자 요약
정규 표현식 기본 메타문자 요약정규 표현식 기본 메타문자 요약
정규 표현식 기본 메타문자 요약
 
정규표현식의 이해와 활용
정규표현식의 이해와 활용정규표현식의 이해와 활용
정규표현식의 이해와 활용
 

Kürzlich hochgeladen

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 

Kürzlich hochgeladen (20)

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 

Apache Click

  • 2. Easy & Simple to Learn POJO Based Lightweight Framework Event Based Programming model Servlet Requests &Velocity for rendering the response JSP, Freemarker, Spring, Hibernate Etc.. Support Apache Click
  • 3. No New Feature Easy, Simple Fast to Development Auto Create HTML Recommend for Prototyping, Management tools Recommendation
  • 6. public class SimplePage extends Page { public SimplePage() { addModel("time", new Date()); } } SimplePage.java <html> <body> Time : $time </body> </html> SimplePage.htm Page
  • 7. public class SimplePage extends Page { public SimplePage() { addModel("time", new Date()); } } SimplePage.java public class SimplePage extends Page { @Bindable protected Date time = new Date(); } SimplePage.java <html> <body> Time : $time </body> </html> SimplePage.htm Page -Velocity
  • 8. public class SimplePage extends Page { public SimplePage() { getHeadElements().add(new JsImport("/static/js/simplepage.js")); getHeadElements().add(new JsScript("alert('Welcome to SimplePage');")); getHeadElements().add(new CssImport("/static/css/simplepage.css")); getHeadElements().add(new CssStyle("body { font-family: Verdana; }")); setStateful(true); } @Override public void onInit() { super.onInit(); } @Override public void onGet() { super.onGet(); } @Override public void onPost() { super.onPost(); } @Override public void onRender() { super.onRender(); } @Override public void onDestroy() { super.onDestroy(); } } ClickServlet.handleRequest() Page.onInit() in session? Page.onGet() Page.onPost() Page.onRender() Page.onDistory() new Page setSession removeSession get post is stateful ? HTTP Request HTTP Response SimplePage.java Page -Velocity
  • 9. <html> <head> $headElements </head> <body> $jsElements </body> </html> SimplePage.htm Page -Velocity
  • 11. Configurations <servlet> <servlet-name>ClickServlet</servlet-name> <servlet-class>org.apache.click.ClickServlet</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>ClickServlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> web.xml
  • 12. automappingListPage.htm listPage.htm list_page.htm list-page.htm list.htm List.htm Configurations <?xml version="1.0" encoding="UTF-8"?> <click-app charset="UTF-8" locale="ko"> <pages package="net.daum.cafe.moa.page"/> </click-app> click.xml net.daum.cafe.moa.page.ListPage.java
  • 13. Configurations <?xml version="1.0" encoding="UTF-8"?> <click-app charset="UTF-8" locale="ko"> <pages package="net.daum.cafe.moa.page" automapping="false"> <page path="index.htm" classname="Home"/> <page path="login/login.htm" classname="Login"> <header name="Cache-Control" value="max-age=3600, public, must-revalidate"/> </page> <excludes pattern="static/*" /> </pages> </click-app> click.xml index.htm net.daum.cafe.moa.page.HomePage.java login/login.htm net.daum.cafe.moa.page.LoginPage.java
  • 15. public class SimpleTable extends Page { @Bindable protected Table table; public SimpleTable(){ table = new Table(); table.setAttribute("style", "font-family:Gulim; font-size:12px;"); table.setPageSize(10); table.setShowBanner(true); table.setSortable(true); Column cafeColumn = new Column("grpname", "카페"); cafeColumn.setMaxLength(10); cafeColumn.setAutolink(true); cafeColumn.setSortable(true); table.addColumn(new Column("id", "id")); table.addColumn(cafeColumn); } @Override public void onGet() { table.setDataProvider(new DataProvider<Article>() { @Override public Iterable<Article> getData() { ..... } }); } } SimpleTable.java <html> <head> $headElements </head> <body> $table $jsElements </body> </html> SimpleTable.htm Container -Table
  • 17. Container -Table @Bindable protected ActionLink deleteLink = new ActionLink("Delete", this, "onDeleteClick"); public SimplePage(){ table = new Table(); table.setClass(Table.CLASS_REPORT); ...... deleteLink.setAttribute("onclick", "return window.confirm('정말 삭제하시겠습니까?')"); Column column = new Column("Delete"); column.setDecorator(new LinkDecorator(table, deleteLink, "id")); table.addColumn(column); } public void onDeleteClick(){ String id = deleteLink.getValue(); delete(id); } SimpleTable.java
  • 19. Container - Form public class SimpleForm extends Page { @Bindable protected Form form = new Form(); public SimpleForm(){ form.setMethod("GET"); form.setAttribute("style", "font-family:Gulim; font-size:10px;"); FieldSet fieldSet = new FieldSet("심플 폼"); fieldSet.setColumns(2); fieldSet.add(new TextField("name", true)); fieldSet.add(new EmailField("emailField", true)); fieldSet.add(new ColorPicker("Color")); fieldSet.add(new DateField("dateField")); fieldSet.add(new NumberField("numberField")); fieldSet.add(new DoubleField("doubleField")); fieldSet.add(new TelephoneField("telephoneField")); fieldSet.add(new VirtualKeyboard("keyboardField")); fieldSet.add(new CountrySelect("countrySelect")); fieldSet.add(new Submit("OK")); fieldSet.setListener(this, "onSubmit"); form.add(fieldSet); } public boolean onSubmit(){ if(form.isValid()){ ..... } return true; } } SimpleForm.java
  • 30. field-maxlength-error={0} must be no longer than {1} characters field-minlength-error={0} must be at least {1} characters field-required-error=You must enter a value for {0} file-required-error=You must enter a filename for {0} label-required-prefix= label-required-suffix=<span class="required">*</span> label-not-required-prefix= label-not-required-suffix=&nbsp; not-checked-error=You must select {0} number-maxvalue-error={0} must not be larger than {1} number-minvalue-error={0} must not be smaller than {1} select-error=You must select a value for {0} table-first-label=First table-first-title=Go to first page table-previous-label=Prev table-previous-title=Go to previous page table-next-label=Next table-next-title=Go to next page table-last-label=Last table-last-title=Go to last page table-goto-title=Go to page table-page-banner=<span class="pagebanner">{0} items found, displaying {1} to {2}.</span> table-page-banner-nolinks=<span class="pagebanner-nolinks">{0} items found, displaying {1} to {2}.</span> table-page-links=<span class="pagelinks">[{0}/{1}] {2} [{3}/{4}]</span> table-page-links-nobanner=<span class="pagelinks-nobanner">[{0}/{1}] {2} [{3}/{4}]</span> table-no-rows-found=No records found. table-inline-first-image=/click/paging-first.gif table-inline-first-disabled-image=/click/paging-first-disabled.gif table-inline-previous-image=/click/paging-prev.gif table-inline-previous-disabled-image=/click/paging-prev-disabled.gif table-inline-next-image=/click/paging-next.gif table-inline-next-disabled-image=/click/paging-next-disabled.gif table-inline-last-image=/click/paging-last.gif table-inline-last-disabled-image=/click/paging-last-disabled.gif table-inline-page-links=Page {0} {1} {2} {3} {4} production-error-message=<div id='errorReport' class='errorReport'>The application encountered an unexpected error. </div> Message Properties
  • 31. Page scope messages : Global scope messages : Control scope messages : Global Control scope messages : /package/Page.properties /click-page.properties /package/CustomControl.properties /click-control.properties Message Properties