Struts2 Data Validation Techniques

Overview

Struts2 provides multiple mechanisms for validating input data such as email addresess, numeric ranges, and date formats. There are three primary validation approaches: using the validate() method, XML-based validation, and annotation-based validation. 1. Basic Setup

Define a User class with standard fields and accessors: ```

package com.example.demo;

import java.util.Date;

public class User { private String name; private int age; private String email; private Date birthDay;

// Standard getters and setters
public String getName() { return name; }
public void setName(String name) { this.name = name; }

public int getAge() { return age; }
public void setAge(int age) { this.age = age; }

public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }

public Date getBirthDay() { return birthDay; }
public void setBirthDay(Date birthDay) { this.birthDay = birthDay; }

}


</div>2. Programmatic Validation Using validate()
-------------------------------------------

Overrride the `validate()` method in an `ActionSupport` subclass to perform validation logic before execution. <div class="code-block">```

package com.example.demo;

import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.opensymphony.xwork2.ActionSupport;

public class ValidateUserAction extends ActionSupport {
    private User user;

    public String execute() {
        if (user == null || hasFieldErrors()) {
            return "register";
        }
        return "success";
    }

    public void validate() {
        if (user != null) {
            if (!isValidName(user.getName())) {
                addFieldError("user.name", "Name must start with a letter and contain only letters, numbers, underscores");
            }

            if (!isValidAge(user.getAge())) {
                addFieldError("user.age", "Age must be between 0 and 120");
            }

            if (!isValidEmail(user.getEmail())) {
                addFieldError("user.email", "Email format is invalid");
            }

            if (!isBirthDateValid(user.getBirthDay())) {
                addFieldError("user.birthDay", "Birth date must be between 1900-01-01 and 2017-01-01");
            }
        }
    }

    private boolean isValidName(String name) {
        return name != null && name.matches("^[A-Za-z][A-Za-z1-9_-]+$");
    }

    private boolean isValidAge(int age) {
        return age >= 0 && age <= 120;
    }

    private boolean isValidEmail(String email) {
        String regex = "^[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\\.){1,3}[a-zA-z\\-]{1,}$";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(email);
        return matcher.matches();
    }

    private boolean isBirthDateValid(Date date) {
        Date min = parseDate("1900-01-01");
        Date max = parseDate("2017-01-01");
        return !(date.before(min) || date.after(max));
    }

    private Date parseDate(String dateStr) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        ParsePosition pos = new ParsePosition(0);
        return formatter.parse(dateStr, pos);
    }

    public User getUser() { return user; }
    public void setUser(User user) { this.user = user; }
}

To avoid repteitive code in actions, Struts2 supports XML-based validation files. Create a file named ValidateUserAction-validation.xml in the same package as the action class. ```

<field name="user.email">
    <field-validator type="email">
        <message>Email address is not valid</message>
    </field-validator>
</field>

<field name="user.age">
    <field-validator type="int">
        <param name="min">0</param>
        <param name="max">120</param>
        <message>Age must be between 0 and 120</message>
    </field-validator>
</field>

<field name="user.birthDay">
    <field-validator type="date">
        <param name="min">1900-01-01</param>
        <param name="max">2017-01-01</param>
        <message>Birth date must be between ${min} and ${max}</message>
    </field-validator>
</field>

</div>4. Annotation-Based Validation
------------------------------

Use annotations to declare validation rules directly on the action class. <div class="code-block">```

package com.example.demo;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.validator.annotations.*;

@Validations(
    emails = {
        @EmailValidator(fieldName = "user.email", message = "Email format is invalid")
    },
    intRangeFields = {
        @IntRangeFieldValidator(fieldName = "user.age", min = "0", max = "120", message = "Age must be between 0 and 120")
    },
    dateRangeFields = {
        @DateRangeFieldValidator(fieldName = "user.birthDay", min = "1900-01-01", max = "2017-01-01", message = "Birth date must be between 1900-01-01 and 2017-01-01")
    },
    regexFields = {
        @RegexFieldValidator(regexExpression = "^[A-Za-z][A-Za-z1-9_-]+$", fieldName = "user.name", message = "Name must start with a letter and contain only letters, numbers, or underscores")
    }
)
public class ValidateUserAction extends ActionSupport {
    private User user;

    public String execute() {
        return "success";
    }

    public User getUser() { return user; }
    public void setUser(User user) { this.user = user; }
}

Tags: Struts2 Validation XML Validation Annotation Validation Java Web

Posted on Fri, 12 Jun 2026 16:46:33 +0000 by reyes99