blob: ba4ea7eb03bdc93f066077ed9c8a52f0d1c7515f [file] [log] [blame]
= Wicket 7.x Reference Guide
The Apache Software Foundation
:toc: left
:icons: font
:sectlinks:
//custom variables used inside the guide
:wicket_examples_url: http://examples7x.wicket.apache.org
:wicket_tutorial_examples_url: http://examples-wickettutorial.rhcloud.com/
:sectnums:
== Introduction
include::introduction.adoc[]
== How to use the example code
include::howToSource.adoc[]
== Why should I learn Wicket?
include::whyLearn.adoc[]
=== We all like spaghetti :-) ...
include::whyLearn/whyLearn_1.adoc[leveloffset=+1]
=== Component oriented frameworks - an overview
include::whyLearn/whyLearn_2.adoc[leveloffset=+1]
=== Benefits of component oriented frameworks for web development
include::whyLearn/whyLearn_3.adoc[leveloffset=+1]
=== Wicket vs the other component oriented frameworks
include::whyLearn/whyLearn_4.adoc[leveloffset=+1]
== Wicket says “Hello world!”
include::helloWorld.adoc[]
=== Wicket distribution and modules
include::helloWorld/helloWorld_1.adoc[leveloffset=+1]
=== Configuration of Wicket applications
include::helloWorld/helloWorld_2.adoc[leveloffset=+1]
=== The HomePage class
include::helloWorld/helloWorld_3.adoc[leveloffset=+1]
=== Wicket Links
include::helloWorld/helloWorld_4.adoc[leveloffset=+1]
=== Summary
include::helloWorld/helloWorld_5.adoc[leveloffset=+1]
== Wicket as page layout manager
include::layout.adoc[]
=== Header, footer, left menu, content, etc...
include::layout/layout_1.adoc[leveloffset=+1]
=== Here comes the inheritance!
include::layout/layout_2.adoc[leveloffset=+1]
=== Divide et impera!
include::layout/layout_3.adoc[leveloffset=+1]
=== Markup inheritance with the wicket:extend tag
include::layout/layout_4.adoc[leveloffset=+1]
=== Summary
include::layout/layout_5.adoc[leveloffset=+1]
== Keeping control over HTML
include::keepControl.adoc[]
=== Hiding or disabling a component
include::keepControl/keepControl_1.adoc[leveloffset=+1]
=== Modifing tag attributes
include::keepControl/keepControl_2.adoc[leveloffset=+1]
=== Generating tag attribute 'id'
include::keepControl/keepControl_3.adoc[leveloffset=+1]
=== Creating in-line panels with WebMarkupContainer
include::keepControl/keepControl_4.adoc[leveloffset=+1]
=== Working with markup fragments
include::keepControl/keepControl_5.adoc[leveloffset=+1]
=== Adding header contents to the final page
include::keepControl/keepControl_6.adoc[leveloffset=+1]
=== Using stub markup in our pages/panels
include::keepControl/keepControl_7.adoc[leveloffset=+1]
=== How to render component body only
include::keepControl/keepControl_8.adoc[leveloffset=+1]
=== Hiding decorating elements with the wicket:enclosure tag
include::keepControl/keepControl_9.adoc[leveloffset=+1]
=== Surrounding existing markup with Border
include::keepControl/keepControl_10.adoc[leveloffset=+1]
=== Summary
include::keepControl/keepControl_11.adoc[leveloffset=+1]
== Components lifecycle
include::componentLifecycle.adoc[]
=== Lifecycle stages of a component
include::componentLifecycle/componentLifecycle_1.adoc[leveloffset=+1]
=== Hook methods for component lifecycle
include::componentLifecycle/componentLifecycle_2.adoc[leveloffset=+1]
=== Initialization stage
include::componentLifecycle/componentLifecycle_3.adoc[leveloffset=+1]
=== Rendering stage
include::componentLifecycle/componentLifecycle_4.adoc[leveloffset=+1]
=== Removing stage
include::componentLifecycle/componentLifecycle_5.adoc[leveloffset=+1]
=== Summary
include::componentLifecycle/componentLifecycle_6.adoc[leveloffset=+1]
== Page versioning and caching
include::versioningCaching.adoc[]
=== Stateful pages vs stateless
include::versioningCaching/versioningCaching_1.adoc[leveloffset=+1]
=== Stateful pages
include::versioningCaching/versioningCaching_2.adoc[leveloffset=+1]
=== Stateless pages
include::versioningCaching/versioningCaching_3.adoc[leveloffset=+1]
=== Summary
include::versioningCaching/versioningCaching_4.adoc[leveloffset=+1]
== Under the hood of the request processing
include::requestProcessing.adoc[]
=== Class Application and request processing
include::requestProcessing/requestProcessing_1.adoc[leveloffset=+1]
=== Request and Response classes
include::requestProcessing/requestProcessing_2.adoc[leveloffset=+1]
=== The “director” of request processing - RequestCycle
include::requestProcessing/requestProcessing_3.adoc[leveloffset=+1]
=== Session Class
include::requestProcessing/requestProcessing_4.adoc[leveloffset=+1]
=== Exception handling
include::requestProcessing/requestProcessing_5.adoc[leveloffset=+1]
=== Summary
include::requestProcessing/requestProcessing_6.adoc[leveloffset=+1]
== Wicket Links and URL generation
include::urls.adoc[]
=== PageParameters
include::urls/urls_1.adoc[leveloffset=+1]
=== Bookmarkable links
include::urls/urls_2.adoc[leveloffset=+1]
=== Automatically creating bookmarkable links with tag wicket:link
include::urls/urls_3.adoc[leveloffset=+1]
=== External links
include::urls/urls_4.adoc[leveloffset=+1]
=== Stateless links
include::urls/urls_5.adoc[leveloffset=+1]
=== Generating structured and clear URLs
include::urls/urls_6.adoc[leveloffset=+1]
=== Summary
include::urls/urls_7.adoc[leveloffset=+1]
== Wicket models and forms
include::modelsforms.adoc[]
=== What is a model?
include::modelsforms/modelsforms_1.adoc[leveloffset=+1]
=== Models and JavaBeans
include::modelsforms/modelsforms_2.adoc[leveloffset=+1]
=== Wicket forms
include::modelsforms/modelsforms_3.adoc[leveloffset=+1]
=== Component DropDownChoice
include::modelsforms/modelsforms_4.adoc[leveloffset=+1]
=== Model chaining
include::modelsforms/modelsforms_5.adoc[leveloffset=+1]
=== Detachable models
include::modelsforms/modelsforms_6.adoc[leveloffset=+1]
=== Using more than one model in a component
include::modelsforms/modelsforms_7.adoc[leveloffset=+1]
=== Use models!
include::modelsforms/modelsforms_8.adoc[leveloffset=+1]
=== Summary
include::modelsforms/modelsforms_9.adoc[leveloffset=+1]
== Wicket forms in detail
include::forms2.adoc[]
=== Default form processing
include::forms2/forms2_1.adoc[leveloffset=+1]
=== Form validation and feedback messages
include::forms2/forms2_2.adoc[leveloffset=+1]
=== Input value conversion
include::forms2/forms2_3.adoc[leveloffset=+1]
=== Validation with JSR 303
include::forms2/forms2_4.adoc[leveloffset=+1]
=== Submit form with an IFormSubmittingComponent
include::forms2/forms2_5.adoc[leveloffset=+1]
=== Nested forms
include::forms2/forms2_6.adoc[leveloffset=+1]
=== Multi-line text input
include::forms2/forms2_7.adoc[leveloffset=+1]
=== File upload
include::forms2/forms2_8.adoc[leveloffset=+1]
=== Creating complex form components with FormComponentPanel
include::forms2/forms2_9.adoc[leveloffset=+1]
=== Stateless form
include::forms2/forms2_10.adoc[leveloffset=+1]
=== Working with radio buttons and checkboxes
include::forms2/forms2_11.adoc[leveloffset=+1]
=== Selecting multiple values with ListMultipleChoices and Palette
include::forms2/forms2_12.adoc[leveloffset=+1]
=== Summary
include::forms2/forms2_13.adoc[leveloffset=+1]
== Displaying multiple items with repeaters
include::repeaters.adoc[]
=== The RepeatingView Component
include::repeaters/repeaters_1.adoc[leveloffset=+1]
=== The ListView Component
include::repeaters/repeaters_2.adoc[leveloffset=+1]
=== The RefreshingView Component
include::repeaters/repeaters_3.adoc[leveloffset=+1]
=== Pageable repeaters
include::repeaters/repeaters_4.adoc[leveloffset=+1]
=== Summary
include::repeaters/repeaters_5.adoc[leveloffset=+1]
== Component queueing
include::componentQueueing.adoc[]
=== Markup hierarchy and code
include::componentQueueing/componentQueueing_1.adoc[leveloffset=+1]
=== Improved auto components
include::componentQueueing/componentQueueing_2.adoc[leveloffset=+1]
=== When are components dequeued?
include::componentQueueing/componentQueueing_3.adoc[leveloffset=+1]
=== Restrictions of queueing
include::componentQueueing/componentQueueing_4.adoc[leveloffset=+1]
=== Summary
include::componentQueueing/componentQueueing_5.adoc[leveloffset=+1]
== Internationalization with Wicket
include::i18n.adoc[]
=== Localization
include::i18n/i18n_1.adoc[leveloffset=+1]
=== Localization in Wicket
include::i18n/i18n_2.adoc[leveloffset=+1]
=== Bundles lookup algorithm
include::i18n/i18n_3.adoc[leveloffset=+1]
=== Localization of component's choices
include::i18n/i18n_4.adoc[leveloffset=+1]
=== Internationalization and Models
include::i18n/i18n_5.adoc[leveloffset=+1]
=== Summary
include::i18n/i18n_6.adoc[leveloffset=+1]
== Resource management with Wicket
include::resources.adoc[]
=== Static vs dynamic resources
include::resources/resources_1.adoc[leveloffset=+1]
=== Resource references
include::resources/resources_2.adoc[leveloffset=+1]
=== Package resources
include::resources/resources_3.adoc[leveloffset=+1]
=== Adding resources to page header section
include::resources/resources_4.adoc[leveloffset=+1]
=== Context-relative resources
include::resources/resources_5.adoc[leveloffset=+1]
=== Resource dependencies
include::resources/resources_6.adoc[leveloffset=+1]
=== Aggregate multiple resources with resource bundles
include::resources/resources_7.adoc[leveloffset=+1]
=== Put JavaScript inside page body
include::resources/resources_8.adoc[leveloffset=+1]
=== Header contributors positioning
include::resources/resources_9.adoc[leveloffset=+1]
=== Custom resources
include::resources/resources_10.adoc[leveloffset=+1]
=== Mounting resources
include::resources/resources_11.adoc[leveloffset=+1]
=== Shared resources
include::resources/resources_12.adoc[leveloffset=+1]
=== Customizing resource loading
include::resources/resources_13.adoc[leveloffset=+1]
=== CssHeaderItem and JavaScriptHeaderItem compression
include::resources/resources_14.adoc[leveloffset=+1]
=== NIO resources
include::resources/resources_15.adoc[leveloffset=+1]
=== Resourcen derived through models
include::resources/resources_16.adoc[leveloffset=+1]
=== Summary
include::resources/resources_17.adoc[leveloffset=+1]
== An example of integration with JavaScript
include::jsintegration.adoc[]
=== What we want to do...
include::jsintegration/jsintegration_1.adoc[leveloffset=+1]
=== ...and how we will do it
include::jsintegration/jsintegration_2.adoc[leveloffset=+1]
=== Summary
include::jsintegration/jsintegration_3.adoc[leveloffset=+1]
== Wicket advanced topics
include::advanced.adoc[]
=== Enriching components with behaviors
include::advanced/advanced_1.adoc[leveloffset=+1]
=== Generating callback URLs with IRequestListener
include::advanced/advanced_2.adoc[leveloffset=+1]
=== Wicket events infrastructure
include::advanced/advanced_3.adoc[leveloffset=+1]
=== Initializers
include::advanced/advanced_4.adoc[leveloffset=+1]
=== Using JMX with Wicket
include::advanced/advanced_5.adoc[leveloffset=+1]
=== Generating HTML markup from code
include::advanced/advanced_6.adoc[leveloffset=+1]
=== Summary
include::advanced/advanced_7.adoc[leveloffset=+1]
== Working with AJAX
include::ajax.adoc[]
=== How to use AJAX components and behaviors
include::ajax/ajax_1.adoc[leveloffset=+1]
=== Build-in AJAX components
include::ajax/ajax_2.adoc[leveloffset=+1]
=== Built-in AJAX behaviors
include::ajax/ajax_3.adoc[leveloffset=+1]
=== Using an activity indicator
include::ajax/ajax_4.adoc[leveloffset=+1]
=== AJAX request attributes and call listeners
include::ajax/ajax_5.adoc[leveloffset=+1]
=== Creating custom AJAX call listener
include::ajax/ajax_6.adoc[leveloffset=+1]
=== Stateless AJAX components/behaviors
include::ajax/ajax_7.adoc[leveloffset=+1]
=== Summary
include::ajax/ajax_8.adoc[leveloffset=+1]
== Integration with enterprise containers
include::jee.adoc[]
=== Integrating Wicket with EJB
include::jee/jee_1.adoc[leveloffset=+1]
=== Integrating Wicket with Spring
include::jee/jee_2.adoc[leveloffset=+1]
=== JSR-330 annotations
include::jee/jee_3.adoc[leveloffset=+1]
=== Summary
include::jee/jee_4.adoc[leveloffset=+1]
== Native WebSockets
include::nativewebsockets.adoc[]
=== How does it work ?
include::nativewebsockets/nativewebsockets_1.adoc[leveloffset=+1]
=== How to use
include::nativewebsockets/nativewebsockets_2.adoc[leveloffset=+1]
=== Client-side APIs
include::nativewebsockets/nativewebsockets_3.adoc[leveloffset=+1]
=== Testing
include::nativewebsockets/nativewebsockets_4.adoc[leveloffset=+1]
=== Differences with Wicket-Atmosphere module.
include::nativewebsockets/nativewebsockets_5.adoc[leveloffset=+1]
=== FAQ
include::nativewebsockets/nativewebsockets_6.adoc[leveloffset=+1]
== Security with Wicket
include::security.adoc[]
=== Authentication
include::security/security_1.adoc[leveloffset=+1]
=== Authorizations
include::security/security_2.adoc[leveloffset=+1]
=== Using HTTPS protocol
include::security/security_3.adoc[leveloffset=+1]
=== URLs encryption in detail
include::security/security_4.adoc[leveloffset=+1]
=== CSRF protection
include::security/security_4_1.adoc[leveloffset=+1]
=== Package Resource Guard
include::security/security_5.adoc[leveloffset=+1]
=== External Security Checks
include::security/security_6.adoc[leveloffset=+1]
=== Summary
include::security/security_7.adoc[leveloffset=+1]
== Test Driven Development with Wicket
include::testing.adoc[]
=== Utility class WicketTester
include::testing/testing_1.adoc[leveloffset=+1]
=== Testing Wicket forms
include::testing/testing_2.adoc[leveloffset=+1]
=== Testing markup with TagTester
include::testing/testing_3.adoc[leveloffset=+1]
=== Summary
include::testing/testing_4.adoc[leveloffset=+1]
== Test Driven Development with Wicket and Spring
include::testingspring.adoc[]
=== Configuration of the runtime environment
include::testingspring/testingspring_1.adoc[leveloffset=+1]
=== Configuration of the JUnit based integration test environment
include::testingspring/testingspring_2.adoc[leveloffset=+1]
=== Summary
include::testingspring/testingspring_3.adoc[leveloffset=+1]
== Wicket Best Practices
include::bestpractices.adoc[]
=== Encapsulate components correctly
include::bestpractices/bestpractices_1.adoc[leveloffset=+1]
=== Put models and page data in fields
include::bestpractices/bestpractices_2.adoc[leveloffset=+1]
=== Correct naming for Wicket IDs
include::bestpractices/bestpractices_3.adoc[leveloffset=+1]
=== Avoid changes at the component tree
include::bestpractices/bestpractices_4.adoc[leveloffset=+1]
=== Implement visibilities of components correctly
include::bestpractices/bestpractices_5.adoc[leveloffset=+1]
=== Always use models
include::bestpractices/bestpractices_6.adoc[leveloffset=+1]
=== Do not unwrap models within the constructor hierarchy
include::bestpractices/bestpractices_7.adoc[leveloffset=+1]
=== Pass models extended components
include::bestpractices/bestpractices_8.adoc[leveloffset=+1]
=== Validators must not change any data or models
include::bestpractices/bestpractices_9.adoc[leveloffset=+1]
=== Do not pass components to constructors
include::bestpractices/bestpractices_10.adoc[leveloffset=+1]
=== Use the Wicket session only for global data
include::bestpractices/bestpractices_11.adoc[leveloffset=+1]
=== Do not use factories for components
include::bestpractices/bestpractices_12.adoc[leveloffset=+1]
=== Every page and component must be tested
include::bestpractices/bestpractices_13.adoc[leveloffset=+1]
=== Avoid interactions with other servlet filters
include::bestpractices/bestpractices_14.adoc[leveloffset=+1]
=== Cut small classes and methods
include::bestpractices/bestpractices_15.adoc[leveloffset=+1]
=== The argument "Bad documentation"
include::bestpractices/bestpractices_16.adoc[leveloffset=+1]
=== Summary
include::bestpractices/bestpractices_17.adoc[leveloffset=+1]
== Wicket Internals
include::internals.adoc[]
=== Page storing
include::internals/pagestoring.adoc[leveloffset=+1]
=== Markup parsing and Autocomponents
include::internals/autocomponents.adoc[leveloffset=+1]
== Wicket Metrics Monitoring (Experimental)
include::monitoring.adoc[]
=== Example setup
include::monitoring/monitoring_1.adoc[leveloffset=+1]
=== Visualization with Graphite
include::monitoring/monitoring_2.adoc[leveloffset=+1]
=== Measured data
include::monitoring/monitoring_3.adoc[leveloffset=+1]
=== Write own measurements
include::monitoring/monitoring_4.adoc[leveloffset=+1]
[appendix]
== Working with Maven
include::maven.adoc[]
=== Switching Wicket to DEPLOYMENT mode
include::maven/maven_1.adoc[leveloffset=+1]
=== Creating a Wicket project from scratch and importing it into our favourite IDE
include::maven/maven_2.adoc[leveloffset=+1]
[appendix]
== Project WicketStuff
include::wicketstuff.adoc[]
=== What is project WicketStuff
include::wicketstuff/wicketstuff_1.adoc[leveloffset=+1]
=== Module tinymce
include::wicketstuff/wicketstuff_2.adoc[leveloffset=+1]
=== Module wicketstuff-gmap3
include::wicketstuff/wicketstuff_3.adoc[leveloffset=+1]
=== Module wicketstuff-googlecharts
include::wicketstuff/wicketstuff_4.adoc[leveloffset=+1]
=== Module wicketstuff-inmethod-grid
include::wicketstuff/wicketstuff_5.adoc[leveloffset=+1]
=== Module wicketstuff-rest-annotations
include::wicketstuff/wicketstuff_6.adoc[leveloffset=+1]
=== Module stateless
include::wicketstuff/wicketstuff_7.adoc[leveloffset=+1]
[appendix]
== Lost In Redirection With Apache Wicket
include::redirects.adoc[]
[appendix]
== Contributing to this guide
include::contributing.adoc[]