import net.sourceforge.stripes.validation.Validate;
import net.sourceforge.stripes.validation.ValidationErrors;
import net.sourceforge.stripes.validation.ValidationMethod;
import net.sourceforge.stripes.validation.ValidationState;
public class CustomValidator {
private String username;
private String password;
@Validate(required = true)
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Validate(required = true)
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@ValidationMethod(on = "login")
public void validateLogin(ValidationErrors errors) {
if (!isValidUser(username, password)) {
errors.add("username", new SimpleError("Invalid username or password"));
}
}
private boolean isValidUser(String username, String password) {
// Perform custom validation logic here
return true;
}
}
<context-param>
<param-name>Extension.Packages</param-name>
<param-value>com.yourpackage</param-value>
</context-param>
import net.sourceforge.stripes.action.ActionBean;
import net.sourceforge.stripes.action.ActionBeanContext;
public class LoginAction implements ActionBean {
private ActionBeanContext context;
private String username;
private String password;
@ValidateNestedProperties({
@Validate(field = "username", required = true),
@Validate(field = "password", required = true)
})
private CustomValidator validator;
public ActionBeanContext getContext() {
return context;
}
public void setContext(ActionBeanContext context) {
this.context = context;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Resolution login() {
// Perform login logic here
return new ForwardResolution("/success.jsp");
}
}