blob: 751e081215f0f89b1150a9efb72637d75e11ee3c [file] [view]
---
layout: default
title: Client Validation example
parent:
title: Client Side Validation
url: client-side-validation
---
# Client Validation Example
Let's create a Client-Side validation workflow, step by step. The `validate` attribute is set to `true`.
> Note: Some themes do not support client-side validation.
## Step 1
Create the form.
```xml
<html>
<head>
<title>Struts2 Showcase - Validation - Basic</title>
<s:head/>
</head>
<body>
<div class="page-header">
<h1>Basic validation Example</h1>
</div>
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<s:form method="post" validate="true">
<s:textfield label="Name" name="name"/>
<s:textfield label="Age" name="age"/>
<s:textfield label="Favorite color" name="answer"/>
<s:submit cssClass="btn btn-primary"/>
</s:form>
</div>
</div>
</div>
</body>
</html>
```
This case uses the default `xhtml` theme, so the `<s:head >` tag is used to link a style sheet.
## Step 2
Create the Action class.
```java
public class QuizAction extends ActionSupport {
private String name;
private int age;
private String answer;
public String getName() {
return name;
}
@StrutsParameter
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
@StrutsParameter
public void setAge(int age) {
this.age = age;
}
public String getAnswer() {
return answer;
}
@StrutsParameter
public void setAnswer(String answer) {
this.answer = answer;
}
}
```
## Step 3
Create the `validation.xml` to configure the validators to be used.
```xml
<!--
Add the following DOCTYPE declaration as first line of your XXX-validation.xml file:
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
-->
<validators>
<field name="name">
<field-validator type="requiredstring">
<message>You must enter a name</message>
</field-validator>
</field>
<field name="age">
<field-validator type="int">
<param name="min">13</param>
<param name="max">19</param>
<message>Only people ages 13 to 19 may take this quiz</message>
</field-validator>
</field>
</validators>
```
### Action and Namespace
A correct action and namespace attributes must be provided to the `<s:form>` tag. For example, if the action named
`quizClient` is defined in the `/validation` namespace, the form must be configured as:
```jsp
<s:form method="post" validate="true" action="quizClient" namespace="/validation">
<s:textfield label="Name" name="name"/>
<s:textfield label="Age" name="age"/>
<s:textfield label="Favorite color" name="answer"/>
<s:submit/>
</s:form>
```
While the following will "work" in the sense that the form will function correctly, *client-side validation will not*.
That is because Struts must know the exact namespace and action (rather than a URL) to properly support validation.
```jsp
<s:form method="post" validate="true" action="/validation/quizClient.action">
<s:textfield label="Name" name="name"/>
<s:textfield label="Age" name="age"/>
<s:textfield label="Favorite color" name="answer"/>
<s:submit/>
</s:form>
```