You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by ad...@apache.org on 2014/04/24 21:41:18 UTC

svn commit: r1589849 [6/6] - in /wicket/common/site/trunk/_site/guide/guide: ./ pages/ src/docs/guide/ src/docs/guide/forms2/ src/docs/guide/helloWorld/ src/docs/img/

Modified: wicket/common/site/trunk/_site/guide/guide/src/docs/guide/forms2/forms2_7.gdoc
URL: http://svn.apache.org/viewvc/wicket/common/site/trunk/_site/guide/guide/src/docs/guide/forms2/forms2_7.gdoc?rev=1589849&r1=1589848&r2=1589849&view=diff
==============================================================================
--- wicket/common/site/trunk/_site/guide/guide/src/docs/guide/forms2/forms2_7.gdoc (original)
+++ wicket/common/site/trunk/_site/guide/guide/src/docs/guide/forms2/forms2_7.gdoc Thu Apr 24 19:41:13 2014
@@ -1,82 +1,17 @@
 
 
-Wicket supports file uploading with the FileUploadField component which must be used with the <input> tag whose type attribute must be set to "file". In order to send a file on form submission we must enable multipart mode calling MultiPart(true)on our form.
-
-In the next example (project UploadSingleFile) we will see a form which allows users to upload a file into the temporary directory of the server (path /tmp on Unix/Linux systems):
+HTML provides a multi-line text input control with <textarea> tag. The Wicket counterpart for this kind of control is @org.apache.wicket.markup.html.form.TextArea@ component:
 
 *HTML:*
 
 {code:html}
-<html>
-	<head>
-	</head>
-	<body>
-	<h1>Upload your file here!</h1>
-	<form wicket:id="form">
-		<input type="file" wicket:id="fileUploadField"/> 
-		<input type="submit" value="Upload"/>
-	</form>
-	<div wicket:id="feedbackPanel">
-	</div>
-	</body>
-</html>
+<textarea wicket:id="description" rows="5" cols="40"></textarea>
 {code}
 
 *Java code:*
 
 {code}
-public class HomePage extends WebPage {
-   private FileUploadField fileUploadField;
-
-    public HomePage(final PageParameters parameters) {
-    	fileUploadField = new FileUploadField("fileUploadField");
-    	
-    	Form form = new Form("form"){
-    		@Override
-    		protected void onSubmit() {
-    		  super.onSubmit();
-    			 
-    		  FileUpload fileUpload = fileUploadField.getFileUpload();
-    			
-    		    try {
-			File file = new File(System.getProperty("java.io.tmpdir") + "/" +
-    						fileUpload.getClientFileName());
-    				
-			    fileUpload.writeTo(file);
-		        } catch (IOException e) {
-			   e.printStackTrace();
-			 }
-    		}
-    	};	
-	
-	form.setMultiPart(true);
-	//set a limit for uploaded file's size
-	form.setMaxSize(Bytes.kilobytes(100));
-	form.add(fileUploadField);
-	add(new FeedbackPanel("feedbackPanel"));
-	add(form);
-    }
-}
-{code}
-
-The code that copies the uploaded file to the temporary directory is inside the onSubmit method of the Form class. The uploaded file is handled with an instance of class FileUpload returned by the  getFileUpload() method of the FileUploadField class. This class provides a set of methods to perform some common tasks like getting the name of the uploaded file (getClientFileName()), coping the file into a directory (writeTo(destinationFile)), calculating file digest (getDigest (digestAlgorithm)) and so on.
-
-Form component can limit the size for uploaded files using its setMaxSize(size) method. In the example we have set this limit to 100 kb to prevent users from uploading files bigger than this size.
-
-{note}
-The maximum size for uploaded files can also be set at application's level using the setDefaultMaximumUploadSize(Bytes maxSize) method of the IApplicationSettings interface:
-
-{code}
-@Override
-public void init()
-{
- getApplicationSettings().setDefaultMaximumUploadSize(Bytes.kilobytes(100));  
-}
+form.add(new TextArea("description", Model.of("")));
 {code}
-{note}
-
-h3. Upload multiple files
-
-If we need to upload multiple files at once, we can use the MultiFileUploadField component which allows the user to select an arbitrary number of files to send on form submission.
 
-An example showing how to use this component can be found in Wicket module wicket-examples in file MultiUploadPage.java. The live example is hosted at "http://www.wicket-library.com/wicket-examples-6.0.x/upload/multi":http://www.wicket-library.com/wicket-examples-6.0.x/upload/multi .
\ No newline at end of file
+Component TextArea is used just like any other single-line text field. To specify the size of the text area we can write attributes rows and cols directly in the markup file or we can create new attribute modifiers and add them to our TextArea component.
\ No newline at end of file

Modified: wicket/common/site/trunk/_site/guide/guide/src/docs/guide/forms2/forms2_8.gdoc
URL: http://svn.apache.org/viewvc/wicket/common/site/trunk/_site/guide/guide/src/docs/guide/forms2/forms2_8.gdoc?rev=1589849&r1=1589848&r2=1589849&view=diff
==============================================================================
--- wicket/common/site/trunk/_site/guide/guide/src/docs/guide/forms2/forms2_8.gdoc (original)
+++ wicket/common/site/trunk/_site/guide/guide/src/docs/guide/forms2/forms2_8.gdoc Thu Apr 24 19:41:13 2014
@@ -1,122 +1,82 @@
 
 
-In chapter 3.2.2 we have seen how to use class Panel to create custom components with their own markup and with an arbitrary number of children components.
+Wicket supports file uploading with the FileUploadField component which must be used with the <input> tag whose type attribute must be set to "file". In order to send a file on form submission we must enable multipart mode calling MultiPart(true)on our form.
 
-While it's perfectly legal to use Panel also to group form components, the resulting component won't be itself a form component and it won't participate in the form's submission workflow. 
+In the next example (project UploadSingleFile) we will see a form which allows users to upload a file into the temporary directory of the server (path /tmp on Unix/Linux systems):
 
-This could be a strong limitation if the custom component needs to coordinate its children during sub-tasks like input conversion or model updating. That's why in Wicket we have the @org.apache.wicket.markup.html.form.FormComponentPanel@ component which combines the features of a Panel (it has its own markup file) and a FormComponent (it is a subclass of FormComponent). 
-
-A typical scenario in which we may need to implement a custom FormComponentPanel is when our web application and its users work with different units of measurement for the same data. 
-
-To illustrate this possible scenario, let's consider a form where a user can insert a  temperature that will be recorded after being converted to Kelvin degrees (see the example project CustomForm ComponentPanel).
-
-The Kelvin scale is wildly adopted among the scientific community and it is one of the seven base units of the "International System of Units":http://en.wikipedia.org/wiki/International_System_of_Units , so it makes perfect sense to store temperatures expressed with this unit of measurement.
-
-However, in our everyday life we still use other temperature scales like Celsius or Fahrenheit, so it would be nice to have a component which internally works with Kelvin degrees and automatically applies conversion between Kelvin temperature scale and the one adopted by the user. 
-
-In order to implement such a component, we can make a subclass of FormComponentPanel and leverage the convertInput and onBeforeRender methods: in the implementation of the convertInput method we will convert input value to Kelvin degrees while in the implementation of onBeforeRender method we will take care of converting the Kelvin value to the temperature scale adopted by the user.
-
-Our custom component will contain two children components: a text field to let user insert and edit a temperature value and a label to display the letter corresponding to user's temperature scale (F for Fahrenheit and C for Celsius). The resulting markup file is the following:
+*HTML:*
 
 {code:html}
 <html>
-<head>
-</head>
-<body>
-	<wicket:panel>
-		Registered temperature: <input size="3" maxlength="3"         
-                             wicket:id="registeredTemperature"/> 
-		<label wicket:id="mesuramentUnit"></label> 
-	</wicket:panel>
-</body>
+	<head>
+	</head>
+	<body>
+	<h1>Upload your file here!</h1>
+	<form wicket:id="form">
+		<input type="file" wicket:id="fileUploadField"/> 
+		<input type="submit" value="Upload"/>
+	</form>
+	<div wicket:id="feedbackPanel">
+	</div>
+	</body>
 </html>
 {code}
 
-As shown in the markup above FormComponentPanel uses the same <wicket:panel> tag used by Panel to define its markup. Now let's see the Java code of the new form component starting with the onInitialize() method:
+*Java code:*
 
 {code}
-public class TemperatureDegreeField extends FormComponentPanel<Double> {
-	
-	private TextField<Double> userDegree;
+public class HomePage extends WebPage {
+   private FileUploadField fileUploadField;
 
-	public TemperatureDegreeField(String id) {
-		super(id);		
-	}
-	
-	public TemperatureDegreeField(String id, IModel<Double> model) {
-		super(id, model);		
-	}
+    public HomePage(final PageParameters parameters) {
+    	fileUploadField = new FileUploadField("fileUploadField");
+    	
+    	Form form = new Form("form"){
+    		@Override
+    		protected void onSubmit() {
+    		  super.onSubmit();
+    			 
+    		  FileUpload fileUpload = fileUploadField.getFileUpload();
+    			
+    		    try {
+			File file = new File(System.getProperty("java.io.tmpdir") + "/" +
+    						fileUpload.getClientFileName());
+    				
+			    fileUpload.writeTo(file);
+		        } catch (IOException e) {
+			   e.printStackTrace();
+			 }
+    		}
+    	};	
 	
-	@Override
-	protected void onInitialize() {
-		super.onInitialize();	
-		
-	     AbstractReadOnlyModel<String> labelModel=new AbstractReadOnlyModel<String>(){
-			@Override
-			public String getObject() {
-				if(getLocale().equals(Locale.US))
-					return "°F";
-				return "°C";
-			}
-		};
-		
-		add(new Label("mesuramentUnit", labelModel));
-		add(userDegree=new TextField<Double>("registeredTemperature", new 
-                           Model<Double>()));
-		userDegree.setType(Double.class);
-	}
+	form.setMultiPart(true);
+	//set a limit for uploaded file's size
+	form.setMaxSize(Bytes.kilobytes(100));
+	form.add(fileUploadField);
+	add(new FeedbackPanel("feedbackPanel"));
+	add(form);
+    }
+}
 {code}
 
-Inside the onInitialize method we have created a read-only model for the label that displays the letter corresponding to the user's temperature scale. To determinate which temperature scale is in use, we retrieve the Locale from the session by calling Component's getLocale() method (we will talk more about this method in chapter 12). Then, if locale is the one corresponding to the United States, the chosen scale will be Fahrenheit, otherwise it will be considered as Celsius. 
+The code that copies the uploaded file to the temporary directory is inside the onSubmit method of the Form class. The uploaded file is handled with an instance of class FileUpload returned by the  getFileUpload() method of the FileUploadField class. This class provides a set of methods to perform some common tasks like getting the name of the uploaded file (getClientFileName()), coping the file into a directory (writeTo(destinationFile)), calculating file digest (getDigest (digestAlgorithm)) and so on.
 
-In the final part of onInitialize() we add the two components to our custom form component. You may have noticed that we have explicitly set the type of model object for the text field to double. This is necessary as the starting model object is a null reference and this prevents the component from automatically determining the type of its model object. 
+Form component can limit the size for uploaded files using its setMaxSize(size) method. In the example we have set this limit to 100 kb to prevent users from uploading files bigger than this size.
 
-Now we can look at the rest of the code containing the convertInput and onBeforeRender methods:
+{note}
+The maximum size for uploaded files can also be set at application's level using the setDefaultMaximumUploadSize(Bytes maxSize) method of the IApplicationSettings interface:
 
 {code}
-// continued example
-	@Override
-	protected void convertInput() {
-		Double userDegreeVal = userDegree.getConvertedInput();
-		Double kelvinDegree;
-		
-		if(getLocale().equals(Locale.US)){
-			kelvinDegree = userDegreeVal +  459.67;
-			BigDecimal bdKelvin = new BigDecimal(kelvinDegree);
-			BigDecimal fraction = new BigDecimal(5).divide(new BigDecimal(9));
-			
-			kelvinDegree = bdKelvin.multiply(fraction).doubleValue();
-		}else{
-			kelvinDegree = userDegreeVal + 273.15;
-		}
-		
-		setConvertedInput(kelvinDegree);
-	}
-	
-	@Override
-	protected void onBeforeRender() {
-		super.onBeforeRender();
-		
-		Double kelvinDegree = (Double) getDefaultModelObject();		
-		Double userDegreeVal = null;
-		
-		if(kelvinDegree == null) return;
-		
-		if(getLocale().equals(Locale.US)){
-			BigDecimal bdKelvin = new BigDecimal(kelvinDegree);
-			BigDecimal fraction = new BigDecimal(9).divide(new BigDecimal(5));
-			
-			kelvinDegree = bdKelvin.multiply(fraction).doubleValue();
-			userDegreeVal = kelvinDegree - 459.67;
-		}else{
-			userDegreeVal = kelvinDegree - 273.15;
-		}
-		
-		userDegree.setModelObject(userDegreeVal);
-	}
+@Override
+public void init()
+{
+ getApplicationSettings().setDefaultMaximumUploadSize(Bytes.kilobytes(100));  
 }
 {code}
+{note}
+
+h3. Upload multiple files
 
-Since our component does not directly receive the user input, convertInput() must read this value from the inner text field using FormComponent's getConvertedInput() method which returns the input value already converted to the type specified for the component (Double in our case). Once we have the user input we convert it to kelvin degrees and we use the resulting value to set the converted input for our custom component (using method setConvertedInput(T convertedInput)).
+If we need to upload multiple files at once, we can use the MultiFileUploadField component which allows the user to select an arbitrary number of files to send on form submission.
 
-Method onBeforeRender() is responsible for synchronizing the model of the inner textfield with the model of our custom component. To do this we retrieve the model object of the custom component with the getDefaultModelObject() method, then we convert it to the temperature scale adopted by the user and finally we use this value to set the model object of the text field.
\ No newline at end of file
+An example showing how to use this component can be found in Wicket module wicket-examples in file MultiUploadPage.java. The live example is hosted at "http://www.wicket-library.com/wicket-examples-6.0.x/upload/multi":http://www.wicket-library.com/wicket-examples-6.0.x/upload/multi .
\ No newline at end of file

Modified: wicket/common/site/trunk/_site/guide/guide/src/docs/guide/forms2/forms2_9.gdoc
URL: http://svn.apache.org/viewvc/wicket/common/site/trunk/_site/guide/guide/src/docs/guide/forms2/forms2_9.gdoc?rev=1589849&r1=1589848&r2=1589849&view=diff
==============================================================================
--- wicket/common/site/trunk/_site/guide/guide/src/docs/guide/forms2/forms2_9.gdoc (original)
+++ wicket/common/site/trunk/_site/guide/guide/src/docs/guide/forms2/forms2_9.gdoc Thu Apr 24 19:41:13 2014
@@ -1,78 +1,122 @@
 
 
-In chapter 6 we have seen how Wicket pages can be divided into two categories: stateful and stateless. Pages that are stateless don't need to be stored in the user session and they should be used  when we don't need to save any user data in the user session (for example in the public area of a site).
+In chapter 3.2.2 we have seen how to use class Panel to create custom components with their own markup and with an arbitrary number of children components.
 
-Besides saving resources on server-side, stateless pages can be adopted to improve user experience and to avoid security weaknesses. A typical situation where a stateless page can bring these benefits is when we have to implement a login page. 
+While it's perfectly legal to use Panel also to group form components, the resulting component won't be itself a form component and it won't participate in the form's submission workflow. 
 
-For this kind of page we might encounter two potential problems if we chose to use a stateful page. The first problem occurs when the user tries to login without a valid session assigned to him. This could happen if the user leaves the login page opened for a period of time bigger than the session's timeout and then he decides to log in. Under these conditions the user will be redirected to a 'Page expired' error page, which is not exactly a nice thing for user experience.
+This could be a strong limitation if the custom component needs to coordinate its children during sub-tasks like input conversion or model updating. That's why in Wicket we have the @org.apache.wicket.markup.html.form.FormComponentPanel@ component which combines the features of a Panel (it has its own markup file) and a FormComponent (it is a subclass of FormComponent). 
 
-The second problem occurs when a malicious user or a web crawler program attempts to login into our web application, generating a huge number of page versions and consequently increasing the size of the user session.
+A typical scenario in which we may need to implement a custom FormComponentPanel is when our web application and its users work with different units of measurement for the same data. 
 
-To avoid these kinds of problems we should build a stateless login page which does not depend on a user session. Wicket provides a special version of the Form component called StatelessForm which is stateless by default (i.e its method getStatelessHint() returns true), hence it's an ideal solution when we want to build a stateless page with a form. A possible implementation of our login form is the following (example project StatelessLoginForm):
+To illustrate this possible scenario, let's consider a form where a user can insert a  temperature that will be recorded after being converted to Kelvin degrees (see the example project CustomForm ComponentPanel).
 
-*HTML:*
+The Kelvin scale is wildly adopted among the scientific community and it is one of the seven base units of the "International System of Units":http://en.wikipedia.org/wiki/International_System_of_Units , so it makes perfect sense to store temperatures expressed with this unit of measurement.
+
+However, in our everyday life we still use other temperature scales like Celsius or Fahrenheit, so it would be nice to have a component which internally works with Kelvin degrees and automatically applies conversion between Kelvin temperature scale and the one adopted by the user. 
+
+In order to implement such a component, we can make a subclass of FormComponentPanel and leverage the convertInput and onBeforeRender methods: in the implementation of the convertInput method we will convert input value to Kelvin degrees while in the implementation of onBeforeRender method we will take care of converting the Kelvin value to the temperature scale adopted by the user.
+
+Our custom component will contain two children components: a text field to let user insert and edit a temperature value and a label to display the letter corresponding to user's temperature scale (F for Fahrenheit and C for Celsius). The resulting markup file is the following:
 
 {code:html}
 <html>
-   <head>
-      <meta charset="utf-8" />
-   </head>
-   <body>
-      <div>Session is <b wicket:id="sessionType"></b></div>
-      <br/>
-      <div>Type 'user' as correct credentials</div>
-      <form wicket:id="form">
-         <fieldset>
-            Username: <input type="text" wicket:id="username"/> <br/>
-            Password: <input type="password" wicket:id="password"/><br/>
-            <input type="submit"/>
-         </fieldset>
-      </form>
-      <br/>
-      <div wicket:id="feedbackPanel"></div>
-   </body>
+<head>
+</head>
+<body>
+	<wicket:panel>
+		Registered temperature: <input size="3" maxlength="3"         
+                             wicket:id="registeredTemperature"/> 
+		<label wicket:id="mesuramentUnit"></label> 
+	</wicket:panel>
+</body>
 </html>
 {code}
 
-*Java code:*
+As shown in the markup above FormComponentPanel uses the same <wicket:panel> tag used by Panel to define its markup. Now let's see the Java code of the new form component starting with the onInitialize() method:
+
+{code}
+public class TemperatureDegreeField extends FormComponentPanel<Double> {
+	
+	private TextField<Double> userDegree;
+
+	public TemperatureDegreeField(String id) {
+		super(id);		
+	}
+	
+	public TemperatureDegreeField(String id, IModel<Double> model) {
+		super(id, model);		
+	}
+	
+	@Override
+	protected void onInitialize() {
+		super.onInitialize();	
+		
+	     AbstractReadOnlyModel<String> labelModel=new AbstractReadOnlyModel<String>(){
+			@Override
+			public String getObject() {
+				if(getLocale().equals(Locale.US))
+					return "°F";
+				return "°C";
+			}
+		};
+		
+		add(new Label("mesuramentUnit", labelModel));
+		add(userDegree=new TextField<Double>("registeredTemperature", new 
+                           Model<Double>()));
+		userDegree.setType(Double.class);
+	}
+{code}
+
+Inside the onInitialize method we have created a read-only model for the label that displays the letter corresponding to the user's temperature scale. To determinate which temperature scale is in use, we retrieve the Locale from the session by calling Component's getLocale() method (we will talk more about this method in chapter 12). Then, if locale is the one corresponding to the United States, the chosen scale will be Fahrenheit, otherwise it will be considered as Celsius. 
+
+In the final part of onInitialize() we add the two components to our custom form component. You may have noticed that we have explicitly set the type of model object for the text field to double. This is necessary as the starting model object is a null reference and this prevents the component from automatically determining the type of its model object. 
+
+Now we can look at the rest of the code containing the convertInput and onBeforeRender methods:
 
 {code}
-public class HomePage extends WebPage {
-    private Label sessionType;
-    private String password;
-    private String username;
-    
-    public HomePage(final PageParameters parameters) {
-       StatelessForm form = new StatelessForm("form"){
-         @Override
-         protected void onSubmit() {
-            //sign in if username and password are “user”
-            if("user".equals(username) && username.equals(password))
-               info("Username and password are correct!");
-            else
-               error("Wrong username or password");
-         }
-      };
-      
-      form.add(new PasswordTextField("password"));
-      form.add(new TextField("username"));      
-      
-      add(form.setDefaultModel(new CompoundPropertyModel(this)));
-      
-      add(sessionType = new Label("sessionType", Model.of("")));
-      add(new FeedbackPanel("feedbackPanel"));
-    }
-    
-    @Override
-    protected void onBeforeRender() {
-       super.onBeforeRender();
-       
-       if(getSession().isTemporary())
-          sessionType.setDefaultModelObject("temporary");
-       else
-          sessionType.setDefaultModelObject("permanent");
-    }
+// continued example
+	@Override
+	protected void convertInput() {
+		Double userDegreeVal = userDegree.getConvertedInput();
+		Double kelvinDegree;
+		
+		if(getLocale().equals(Locale.US)){
+			kelvinDegree = userDegreeVal +  459.67;
+			BigDecimal bdKelvin = new BigDecimal(kelvinDegree);
+			BigDecimal fraction = new BigDecimal(5).divide(new BigDecimal(9));
+			
+			kelvinDegree = bdKelvin.multiply(fraction).doubleValue();
+		}else{
+			kelvinDegree = userDegreeVal + 273.15;
+		}
+		
+		setConvertedInput(kelvinDegree);
+	}
+	
+	@Override
+	protected void onBeforeRender() {
+		super.onBeforeRender();
+		
+		Double kelvinDegree = (Double) getDefaultModelObject();		
+		Double userDegreeVal = null;
+		
+		if(kelvinDegree == null) return;
+		
+		if(getLocale().equals(Locale.US)){
+			BigDecimal bdKelvin = new BigDecimal(kelvinDegree);
+			BigDecimal fraction = new BigDecimal(9).divide(new BigDecimal(5));
+			
+			kelvinDegree = bdKelvin.multiply(fraction).doubleValue();
+			userDegreeVal = kelvinDegree - 459.67;
+		}else{
+			userDegreeVal = kelvinDegree - 273.15;
+		}
+		
+		userDegree.setModelObject(userDegreeVal);
+	}
 }
 {code}
 
-Label sessionType shows if current session is temporary or not and is set inside onBeforeRender(): if our page is really stateless the session will be always temporary. We have also inserted a feedback panel in the home page that shows if the credentials are correct. This was done to make the example form more interactive.
\ No newline at end of file
+Since our component does not directly receive the user input, convertInput() must read this value from the inner text field using FormComponent's getConvertedInput() method which returns the input value already converted to the type specified for the component (Double in our case). Once we have the user input we convert it to kelvin degrees and we use the resulting value to set the converted input for our custom component (using method setConvertedInput(T convertedInput)).
+
+Method onBeforeRender() is responsible for synchronizing the model of the inner textfield with the model of our custom component. To do this we retrieve the model object of the custom component with the getDefaultModelObject() method, then we convert it to the temperature scale adopted by the user and finally we use this value to set the model object of the text field.
\ No newline at end of file

Modified: wicket/common/site/trunk/_site/guide/guide/src/docs/guide/helloWorld/helloWorld_1.gdoc
URL: http://svn.apache.org/viewvc/wicket/common/site/trunk/_site/guide/guide/src/docs/guide/helloWorld/helloWorld_1.gdoc?rev=1589849&r1=1589848&r2=1589849&view=diff
==============================================================================
--- wicket/common/site/trunk/_site/guide/guide/src/docs/guide/helloWorld/helloWorld_1.gdoc (original)
+++ wicket/common/site/trunk/_site/guide/guide/src/docs/guide/helloWorld/helloWorld_1.gdoc Thu Apr 24 19:41:13 2014
@@ -6,6 +6,7 @@ Wicket is available as a binary package 
  wicket-request | This module contains the classes involved into web request processing. | wicket-util
  wicket-util | Contains general-purpose utility classes for functional areas such as I/O, lang, string manipulation, security, etc... | None
  wicket-datetime | Contains special purpose components designed to work with date and time. | wicket-core
+ wicket-bean-validation | Provides support for JSR 303 standard validation. | wicket-core
  wicket-devutils | Contains utility classes and components to help developers with tasks such as debugging, class inspection and so on. | wicket-core, wicket-extensions
 wicket-extensions | Contains a vast set of built-in components to build a rich UI for our web application (Ajax support is part of this module). | wicket-core
 wicket-auth-roles | Provides support for role-based authorization. | wicket-core
@@ -17,4 +18,4 @@ wicket-jmx| This module provides panels 
 wicket-objectsizeof-agent | Provides integration with Java agent libraries and instrumentation tools. | wicket-core
 {table}
 
-Please note that the core module depends on the utility and request modules, hence it cannot be used without them.
\ No newline at end of file
+Please note that the core module depends on the utility and request modules, hence it cannot be used without them.

Modified: wicket/common/site/trunk/_site/guide/guide/src/docs/guide/toc.yml
URL: http://svn.apache.org/viewvc/wicket/common/site/trunk/_site/guide/guide/src/docs/guide/toc.yml?rev=1589849&r1=1589848&r2=1589849&view=diff
==============================================================================
--- wicket/common/site/trunk/_site/guide/guide/src/docs/guide/toc.yml (original)
+++ wicket/common/site/trunk/_site/guide/guide/src/docs/guide/toc.yml Thu Apr 24 19:41:13 2014
@@ -81,15 +81,16 @@ forms2:
   forms2_1: Default form processing
   forms2_2: Form validation and feedback messages
   forms2_3: Input value conversion
-  forms2_4: Submit form with an IFormSubmittingComponent
-  forms2_5: Nested forms
-  forms2_6: Multi-line text input
-  forms2_7: File upload
-  forms2_8: Creating complex form components with FormComponentPanel
-  forms2_9: Stateless form
-  forms2_10: Working with radio buttons and checkboxes
-  forms2_11: Selecting multiple values with ListMultipleChoices and Palette
-  forms2_12: Summary
+  forms2_4: Validation with JSR 303
+  forms2_5: Submit form with an IFormSubmittingComponent
+  forms2_6: Nested forms
+  forms2_7: Multi-line text input
+  forms2_8: File upload
+  forms2_9: Creating complex form components with FormComponentPanel
+  forms2_10: Stateless form
+  forms2_11: Working with radio buttons and checkboxes
+  forms2_12: Selecting multiple values with ListMultipleChoices and Palette
+  forms2_13: Summary
 repeaters:
   title: Displaying multiple items with repeaters
   repeaters_1: The RepeatingView Component

Added: wicket/common/site/trunk/_site/guide/guide/src/docs/img/jsr303-form-validation.png
URL: http://svn.apache.org/viewvc/wicket/common/site/trunk/_site/guide/guide/src/docs/img/jsr303-form-validation.png?rev=1589849&view=auto
==============================================================================
Binary file - no diff available.

Propchange: wicket/common/site/trunk/_site/guide/guide/src/docs/img/jsr303-form-validation.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: wicket/common/site/trunk/_site/guide/guide/testing.html
URL: http://svn.apache.org/viewvc/wicket/common/site/trunk/_site/guide/guide/testing.html?rev=1589849&r1=1589848&r2=1589849&view=diff
==============================================================================
--- wicket/common/site/trunk/_site/guide/guide/testing.html (original)
+++ wicket/common/site/trunk/_site/guide/guide/testing.html Thu Apr 24 19:41:13 2014
@@ -427,7 +427,7 @@ formTester.submit(<span class="java&#45;
 <div id="footer">
     
 Copyright &copy; 2013-2014 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2014-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2014-04-24)</b>
 
     
 </div>

Modified: wicket/common/site/trunk/_site/guide/guide/testingspring.html
URL: http://svn.apache.org/viewvc/wicket/common/site/trunk/_site/guide/guide/testingspring.html?rev=1589849&r1=1589848&r2=1589849&view=diff
==============================================================================
--- wicket/common/site/trunk/_site/guide/guide/testingspring.html (original)
+++ wicket/common/site/trunk/_site/guide/guide/testingspring.html Thu Apr 24 19:41:13 2014
@@ -321,7 +321,7 @@ Since the development of many web applic
 <div id="footer">
     
 Copyright &copy; 2013-2014 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2014-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2014-04-24)</b>
 
     
 </div>

Modified: wicket/common/site/trunk/_site/guide/guide/urls.html
URL: http://svn.apache.org/viewvc/wicket/common/site/trunk/_site/guide/guide/urls.html?rev=1589849&r1=1589848&r2=1589849&view=diff
==============================================================================
--- wicket/common/site/trunk/_site/guide/guide/urls.html (original)
+++ wicket/common/site/trunk/_site/guide/guide/urls.html Thu Apr 24 19:41:13 2014
@@ -366,7 +366,7 @@ setResponsePage(MountedPageWithPlacehold
 <div id="footer">
     
 Copyright &copy; 2013-2014 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2014-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2014-04-24)</b>
 
     
 </div>

Modified: wicket/common/site/trunk/_site/guide/guide/versioningCaching.html
URL: http://svn.apache.org/viewvc/wicket/common/site/trunk/_site/guide/guide/versioningCaching.html?rev=1589849&r1=1589848&r2=1589849&view=diff
==============================================================================
--- wicket/common/site/trunk/_site/guide/guide/versioningCaching.html (original)
+++ wicket/common/site/trunk/_site/guide/guide/versioningCaching.html Thu Apr 24 19:41:13 2014
@@ -291,7 +291,7 @@ Page '&#60;page class&#62;' is not state
 <div id="footer">
     
 Copyright &copy; 2013-2014 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2014-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2014-04-24)</b>
 
     
 </div>

Modified: wicket/common/site/trunk/_site/guide/guide/whyLearn.html
URL: http://svn.apache.org/viewvc/wicket/common/site/trunk/_site/guide/guide/whyLearn.html?rev=1589849&r1=1589848&r2=1589849&view=diff
==============================================================================
--- wicket/common/site/trunk/_site/guide/guide/whyLearn.html (original)
+++ wicket/common/site/trunk/_site/guide/guide/whyLearn.html Thu Apr 24 19:41:13 2014
@@ -244,7 +244,7 @@ Wicket is not the only component oriente
 <div id="footer">
     
 Copyright &copy; 2013-2014 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2014-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2014-04-24)</b>
 
     
 </div>

Modified: wicket/common/site/trunk/_site/guide/guide/wicketstuff.html
URL: http://svn.apache.org/viewvc/wicket/common/site/trunk/_site/guide/guide/wicketstuff.html?rev=1589849&r1=1589848&r2=1589849&view=diff
==============================================================================
--- wicket/common/site/trunk/_site/guide/guide/wicketstuff.html (original)
+++ wicket/common/site/trunk/_site/guide/guide/wicketstuff.html Thu Apr 24 19:41:13 2014
@@ -321,7 +321,7 @@ To write/read objects to response/from r
 <div id="footer">
     
 Copyright &copy; 2013-2014 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2014-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2014-04-24)</b>
 
     
 </div>