Не большой поклонник управляемой моделью ... но вот пример.
Перед примером обратите внимание, что использование validate () не имеет большого смысла с точки зрения ModelDriven.Причина в том, что Модель следует использовать для нескольких действий, и поэтому валидация, вероятно, должна быть последовательной.Вы не используете модель, управляемую только для того, чтобы сделать имена свойств немного короче (для этого вы используете push-тег struts2).Такую проверку следует выполнять с xml, поскольку модель больше, чем какое-либо одно действие.Каждое действие, которое использует эту модель, использует валидатор Visitor.Этот валидатор просто ищет файл валидации xml для модели.В следующем примере, однако, будет использоваться метод validate () в действии, чтобы сэкономить время.
В следующем примере будет использоваться плагин struts2 -ventionstions для уменьшения размера примера (добавление его в проект просто вопросдобавления одной банки).
создать : com.quaternion.action.AddUser
package com.quaternion.action;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class AddUser extends ActionSupport implements ModelDriven<User>{
User user = new User();
@Override
public User getModel() {
return user;
}
@Override
public void validate(){
if (user.age != 12) {
super.addActionError("bla bla bla");
}
}
}
создать : com.quaternion.action.User
package com.quaternion.action;
public class User {
public String name;
public int age;
}
создать : /WEB-INF/content/add-user-input.jsp
<%@taglib prefix="s" uri="/struts-tags"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Form</title>
</head>
<body>
<h1>Form</h1>
<s:actionerror/>
<s:form action="add-user">
<s:textfield name="name"/>
<s:textfield name="age"/>
<s:submit/>
</s:form>
</body>
</html>
создать : / WEB-INF / content /add-user-success.jsp
<%@taglib prefix="s" uri="/struts-tags"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Success</title>
</head>
<body>
<h1>Success</h1>
</body>
</html>
Для проверки :
Добавьте / add-user-input в качестве имени действия на вашемконтекстный путь.Если вы введете 12 лет, вы получите страницу успеха, если вы введете что-либо еще, вы получите ошибку действия.Это было проверено на работу.Возможно, была сделана опечатка, но главное, что нужно убрать, - это ошибка в вашем приложении, при использовании обоих соглашений или xml не должно быть проблем с тем, что вы делаете.