不是模型驱动的忠实粉丝......但这里有一个例子。
在示例之前,请注意使用 validate() 在 ModelDriven 方面没有多大意义。原因是模型应该用于多个操作,因此验证应该是一致的。您不使用模型驱动只是为了使属性名称更短(为此您使用 struts2 push 标签)。由于模型比任何一个动作都大,因此应该使用 xml 进行此类验证。使用该模型的每个操作都使用访问者验证器。此验证器仅查找模型的 xml 验证文件。但是,以下示例将在操作中使用 validate() 方法来节省时间。
以下示例将使用 struts2-conventions-plugin 来减小示例大小(将其添加到您的项目中只需添加一个 jar 即可)。
创建: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,您正在做的事情应该没有问题。