【问题标题】:Annotation validation using ModelDriven in Struts2在 Struts2 中使用 ModelDriven 进行注释验证
【发布时间】:2013-07-29 18:55:13
【问题描述】:

我正在尝试使用ModelDriven 方法+在服务器端使用注释进行验证。但似乎注释根本不起作用。我有一个简单的User 类,带有namesurnameemail 等:

@Entity
@Table(name = "USER")
@Validation
public class User {
    private Long id;
    private String name;
    private String gender;
    private String country;
    private String aboutYou;
    private Boolean mailingList;
    ...
    @Column(name = "USER_NAME")
    @RequiredStringValidator(message = "User Name field is empty.")
    public String getName() {
        return name;
    }

    @Column(name = "USER_GENDER")
    @RequiredStringValidator(message = "User Gender field is empty.")
    public String getGender() {
        return gender;
    }
...
}

我使用@RequiredStringValidator 验证gendername 字段。

我的UserAction 处理请求的类是:

@Validation
public class UserAction extends ActionSupport implements ModelDriven<User> {

    private static final long serialVersionUID = -6659925652584240539L;

    private User user = new User();
    private List<User> userList = new ArrayList<User>();
    private UserDAO userDAO = new UserDAOImpl();

    @VisitorFieldValidator(message = "", appendPrefix = false)
    public User getModel() {
        return user;
    }

    /**

     * To save or update user.
     *
     * @return String
     */
    @VisitorFieldValidator(message = "", appendPrefix = false)
    public String saveOrUpdate() {
        userDAO.saveOrUpdateUser(user);
        return SUCCESS;
    }

    /**
     * To list all users.
     *
     * @return String
     */
    public String list() {
        userList = userDAO.listUser();
        return SUCCESS;
    }

    @VisitorFieldValidator(message = "", appendPrefix = false)
    public User getUser() {
        return user;
    }

    ...
}

我使用 @VisitorFieldValidator(message = "", appendPrefix = false) 是因为我已经读到它在使用 ModelDriven 方法时需要。

我的struts.xml 是:

<struts>
    <package name="default" extends="hibernate-default">
        <action name="saveOrUpdateUser" method="saveOrUpdate" class="com.tutorials4u.web.UserAction">
            <result name="success" type="redirect">listUser</result>
            <result name="input">/register.jsp</result>
        </action>
        <action name="listUser" method="list" class="com.tutorials4u.web.UserAction">
            <result name="success">/register.jsp</result>
            <result name="input">/register.jsp</result>
        </action>
</struts>

我读到需要定义&lt;result name="input"&gt; 进行验证。

这是我的register.jsp,其中定义了必须验证的字段:

<s:form action="saveOrUpdateUser" method = "POST" validate="true">
    <s:actionerror/>
    <s:fielderror />
    <s:push value="user">
        <s:hidden name="id" />
        <s:textfield name="name" label="User Name" />
        <s:radio name="gender" label="Gender" list="{'Male','Female'}" />
        <s:select name="country" list="{'India','USA','UK'}" headerKey=""
                  headerValue="Select" label="Select a country" />
        <s:textarea name="aboutYou" label="About You" />
        <s:checkbox name="mailingList"
                    label="Would you like to join our mailing list?" />
        <s:submit />
    </s:push>
</s:form>

我的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
    <description>struts2</description>
    <display-name>struts2</display-name>
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>
            org.apache.struts2.dispatcher.FilterDispatcher
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

问题是这一切都行不通。我仍然为此奋斗了 4 个小时,我脑海中唯一的想法告诉我,进行 my_own_bicycle 验证而不是使用这种方便 解决方案进行验证更容易。

【问题讨论】:

    标签: java validation jsp struts2 model-driven


    【解决方案1】:

    首先,Validation 注解已弃用。

    其次,字段名称应准确映射操作中的对象。所以,push 标签是没用的,User 对象全部被modelDriven interceptor 推送到值栈中。

    validate="true" 通知 Struts 您正在使用客户端 javascript 验证。

    确保您在 JSP 中启用了 s:head 标记和 javascript。

    【讨论】:

    • 我不知道 validate="true" 表示客户端的验证。我应该写什么来在服务器端进行验证?谢谢。
    • 删除它,它会继续。
    • 我已经添加了我的 web.xml 定义。可能有问题。
    • 我应该在删除 validate="true" 后定义 s:head 吗?
    • 是的,您遇到了问题 - FilterDispatcher 已弃用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 2021-01-16
    • 1970-01-01
    相关资源
    最近更新 更多