validation - 在 Struts2 中,我无法将模型驱动与验证一起使用

标签 validation jakarta-ee struts2 model-driven

在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>

我的类(class):

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

我尝试不使用“implements ModelDriven”并且它可以工作

模型驱动删除了actionErrors(我认为)

我想使用验证和模型驱动“有什么想法吗?”

最佳答案

不太喜欢模型驱动......但这里有一个例子。

在示例之前请注意,使用 validate() 对于 ModelDriven 来说没有多大意义。原因是模型应该在多个操作中使用,因此验证可能应该是一致的。您使用模型驱动不仅仅是为了使属性名称更短(为此,您使用 struts2 推送标签)。因此,这种验证应该使用 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 时,您所做的事情应该没有问题。

关于validation - 在 Struts2 中,我无法将模型驱动与验证一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9763924/

相关文章:

javascript - 按最小长度、最大长度、电子邮件、数字、必需等方式验证表格。angular 2

iPhone如何验证字符串只是Objective-c中的图像名称或图像url?

jakarta-ee - 我可以使用 apache wink (JAX/RS) 实现 Hibernate (JSR 303) 方法验证吗

java - 浏览器停止加载后停止服务器线程

javascript - struts2 jquery 表仅显示在第一个选项卡上

java - 如何按照jsp页面上选中的顺序获取复选框的值?

java - s :form tag action parameters being removed

wordpress - WooCommerce - 禁用邮政编码验证

Java Jersey 验证

spring - 在子上下文中覆盖父上下文中定义的 bean