在struts.xml中:
<action name="User_UserFormSubmit" class="actions.UserManager">
<result name="input" >/jsp/user_form.jsp</result>
<result name="success" type="redirectAction"> success_register</result>
</action>
我的课程:
public class UserManager extends ActionSupport implements ModelDriven<User>{
private User user = new User();
@Override
public User getModel() {
return user;
}
public String validate() {
addActionError("blabla");
}
public String execute() {
return SUCCESS;
} ...
然后在jsp:
<s:property value="getActionErrors()"/>
我期望输入结果:
<li> blabla </li>
我成功到达了user_form.jsp,但是没有出现actionError
我试过没有“实现ModelDriven”并且它正常工作
模型驱动擦除actionErrors(我猜)
我想使用validate和modeldriven?任何想法?
答案 0 :(得分:2)
不是模型驱动的忠实粉丝......但这是一个例子。
在示例之前请注意,使用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,你应该没有问题。
答案 1 :(得分:0)
您也可以使用@validations
进行验证,您可以访问验证器中的模型驱动对象。
@Action(value = "save-user")
@Validations(
stringLengthFields = {
@StringLengthFieldValidator(fieldName = "name", trim = true, key = "validate.required.string.length"),
@StringLengthFieldValidator(fieldName = "age", trim = true, key = "validate.required.string.length"),
@StringLengthFieldValidator(fieldName = "address.addLine1", trim = true, key = "validate.required.string.length")
})
public String save() {