java - 带注释和输入标记的 Struts2 表单验证

标签 java html jsp struts2 struts-tags

我正在学习struts2中的表单验证。我已经成功实现了它,并且当文本字段为空时,它在 jsp 页面上显示错误消息。但现在我删除了 <s:textfield>相反,我使用 <input type="text">标签。现在这不起作用,有人可以告诉我如何实现这一目标吗?

以下是我的代码

@Namespace("/User")
@ResultPath("/")
@Result(name = "input", location = "pages/registration.jsp")
public class UserAction extends ActionSupport implements ServletRequestAware, ModelDriven<User>
{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    User user = new User();
    private HttpServletRequest servletRequest;
    List<User> users = new ArrayList<User>();

    public User getModel()
    {
        return user;
    }

    public User getUser()
    {
        return user;
    }

    public void setUser(User user)
    {
        this.user = user;
    }

    public HttpServletRequest getServletRequest()
    {
        return servletRequest;
    }

    public void setServletRequest(HttpServletRequest servletRequest)
    {
        this.servletRequest = servletRequest;
    }

    public List<User> getUsers()
    {
        return users;
    }

    public void setUsers(List<User> users)
    {
        this.users = users;
    }

    @Action(value = "register", results = {@Result(name = "input", location = "pages/registration.jsp"), @Result(name = "success", location = "pages/registration.jsp")})
    // @InputConfig(methodName = "registeruser")
    public String register()
    {
        return SUCCESS;
    }

    @Action(value = "registeruser", results = {@Result(location = "pages/welcome.jsp")})
    public String registeruser()
    {
        UserDao userDao = new UserDaoImpl();

        try
        {
            String uploadFilePath = servletRequest.getSession().getServletContext().getRealPath("/").concat("/User/images");
            CommonUtils.uploadFile(user.getFile(), uploadFilePath, user.getFileFileName());
            userDao.save(user, uploadFilePath);
        }
        catch (Exception e)
        {
            System.out.println(e);
        }

        return SUCCESS;
    }

    public void validate()
    {
        System.out.println("in");
        if ("".equals(user.getFirstName()))
        {
            addFieldError("firstName", "First name should not be blank");       
        }
        if ("".equals(user.getLastName()))
        {           
            addFieldError("lastName", "Last name should not be blank");         
        }
    }

}

Jsp页面

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <%@ taglib uri="/struts-tags" prefix="s" %> 
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Registration</title>
    </head>
    <body>
        <form action="registeruser" method="post" enctype="multipart/form-data">
        <s:actionerror/>
            <table>
                <tr>
                    <td>First Name</td>
                    <td><input type="text" name="firstName" id="firstName"></td>
                    <%-- <td><s:textfield name="firstName"></s:textfield></td> --%>
                </tr>
                <tr>
                    <td>Last Name</td>
                    <td><input type="text" name="lastName" id="lastName"></td>
                </tr>
                <tr>
                    <td>Contact Number</td>
                    <td><input type="text" name="contactNumber" id="contactNumber"></td>
                </tr>
                <tr>
                    <td>Email</td>
                    <td><input type="text" name="email" id="email"></td>
                </tr>
                <tr>
                    <td>Address</td>
                    <td><textarea rows="5" cols="50" name="address" id="address"></textarea></td>
                </tr>
                <tr>
                    <td>Gender</td>
                    <td><input type="radio" name="gender" id="male" value="male">Male<br />
                    <input type="radio" name="gender" id="female" value="female">Female</td>
                </tr>
                <tr>
                    <td>Degree</td>
                    <td><input type="checkbox" name="degree" id="graduation"
                        value="graduation">Graduation<br />
                    <input type="checkbox" name="degree" id="postgraduation"
                        value="postgraduation">Post Graduation</td>
                </tr>
                <tr>
                    <td>Technology</td>
                    <td><select name="technology" id="technology">
                            <optgroup label="Java">
                                <option value="spring">Spring</option>
                                <option value="hibernate">Hibernate</option>
                                <option value="struts2">Struts2</option>
                            </optgroup>
                            <optgroup label=".Net">
                                <option value="asp">ASP</option>
                                <option value="vb.net">VB.NET</option>
                            </optgroup>
                    </select></td>
                </tr>
                <tr>
                    <td>Upload file</td>
                    <td><input type="file" name="file" id="file"></td>
                </tr>
                <tr>
                    <td><input type="submit" value="Save"></td>
                </tr>
            </table>
        </form>
    </body>
    </html>

最佳答案

如果删除 <s:textfield />并使用纯 HTML <input type="text" /> ,您需要手动实现框架标记提供的功能。

Struts2使用主题生成HTML,使用默认主题(XHTML)时,会自动生成fieldError。另请注意,使用纯 HTML 标记时,您需要手动设置该值。我建议你继续使用Struts2标签,但是要回答问题,相当于

<s:textfield name="firstName" />

在纯 HTML 中是

<input type="text" name="firstName" value="<s:properry value='firstName'>" />
<s:fielderror fieldName="firstName" />

关于java - 带注释和输入标记的 Struts2 表单验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35452609/

相关文章:

java - Spring Boot 程序化日志记录配置

java - 如何从 Json 转换为 Protobuf?

html - 列未显示 - 垫表

javascript - 两个按钮激活一项功能

javascript - 如何在html中彼此相邻显示两个单选按钮?

java - 将时间戳排序为半小时 block

JavaScript 总是返回 true

java - 是否有独立于平台的方式以编程方式从 zip/jar 中删除文件?

java - Java 中一个对象与另一个对象的弱关联?

javascript - 语音识别 - 连续运行