Не большой поклонник модели ... но вот пример.
Перед примером обратите внимание, что использование validate() не имеет большого смысла с точки зрения ModelDriven. Причина в том, что модель должна использоваться для нескольких действий, и поэтому проверка должна, вероятно, быть последовательной. Вы не используете модель, приводимую только для того, чтобы сделать имена свойств немного короче (для этого вы используете тег struts2 push). Поскольку такая проверка должна выполняться с помощью xml, поскольку модель больше, чем любое действие. Каждое действие, использующее эту модель, использует валидатор посетителя. Этот валидатор просто ищет файл проверки xml для модели. Следующий пример, однако, будет использовать метод validate() в действии, чтобы сэкономить время.
В следующем примере будет использоваться плагин struts2-convention-plugin для уменьшения размера примера (добавление его в проект просто вопрос добавления одной банки).
создать: 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/содержание /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>
Чтобы проверить:
Добавить /надстройку ввод пользователя как имя действия на ваш контекстный путь. Если вы введете возраст 12 лет, вы получите страницу успеха, если вы введете что-нибудь еще, вы получите сообщение об ошибке. Это было проверено на работу. Возможно, была напечатана опечатка, но главное убрать - есть ли ошибка в вашем приложении, используя обе соглашения или xml, не должно быть никаких проблем с тем, что вы делаете.
Определенный тип результата ввода? Вы получаете какое-либо исключение? –
Я определил «вход типа результата», и у меня нет никаких исключений. Я успешно попал в jsp, но ActionErrors, где стерта моделью (я полагаю) – Troncador
Можете ли вы предоставить файл конфигурации struts.xml? –