addFieldError在Struts2中不起作用

时间:2013-02-13 21:06:16

标签: struts2

我正在学习struts2并面临显示addFieldError消息的一些问题..没有显示.. 当我运行我的项目并将userID字段留空时,它确实进入了validate方法,甚至满足 isEmpty 方法的条件,但它没有显示任何错误消息。 我把s.o.p.在 isEmpty 方法中查看的语句,它是否进入.. 在控制台上打印了该参数,网址变为 ../ MyStruts / validation.action ,没有任何错误,没有任何进一步发生..

有人可以告诉我,我做错了吗... 这是我的代码..

struts.xml中

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
 "http://struts.apache.org/dtds/struts-2.0.dtd">

 <struts>


 <package name="validate" extends="struts-default">
 <action name="validation"  class="com.staction.DataAction">
 <result name="success">/success.jsp</result>
 <result name="input">/form1.jsp</result>
 <result name="error">/error.jsp</result>
  </action>  </package>

   </struts>

form1.jsp

  <%@ page language="java" contentType="text/html; charset=ISO-8859-1"   pageEncoding="ISO-8859-1"%>
   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <%@ taglib prefix="s" uri="/struts-tags" %>

  <html>
 <head>

</head>
<s:form action="validation">
<h1>
<s:textfield label="UserName" name="userID" />
<s:password label="password" name="password" />
</h1>
<s:submit />
</s:form>
<s:a href="forget">forget password </s:a>
    </html>

行动类......

    package com.staction;

     import org.apache.commons.lang3.StringUtils;

     import com.opensymphony.xwork2.ActionSupport; 
     import com.opensymphony.xwork2.ModelDriven;

    public class DataAction extends ActionSupport implements ModelDriven<User> {

private static final long serialVersionUID = 1L;
User user;
DataCheck dc;
public DataAction() {
    user=new User();
    dc=new DataCheck();
}

@Override
public void validate() {
    if(StringUtils.isEmpty(user.getUserID()))
    {
        System.out.println("hellp");
        addFieldError("user.userID", "wtf!!!!");
    }

}
public String execute()
{
    System.out.println("user.userID");
    /*      if(dc.isValid(user))
{
    return SUCCESS;
}*/
    return ERROR;
}

@Override
public User getModel() {
    // TODO Auto-generated method stub
    return user;
}

}

最后是User类..

package com.staction;

import org.apache.commons.lang3.StringUtils;

import com.opensymphony.xwork2.ActionSupport;

public class User{
String userID;
String password;

public String getUserID() {
    return userID;
}
public void setUserID(String userID) {
    this.userID = userID;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}
   }

3 个答案:

答案 0 :(得分:2)

您的表格:

<s:textfield label="UserName" name="userID" />

您的字段错误:

addFieldError("user.userID", "wtf!!!!");

看到区别?

此外:

  • 我希望您的代码实际上不是随机格式化的;这很难读。
  • 为什么User课程延长ActionSupport?如果它不是一个动作,不要扩展基本默认动作:它是毫无意义的,并且具有误导性。
  • 考虑将行动命名为有意义的行为:大多数行动是“数据行动”。
  • 发布示例时,请仔细删除已注释掉的代码以及与特定问题无直接关系的内容。

答案 1 :(得分:0)

除了Dave Newton的回复,你必须删除&#34; user。&#34;在addFieldError中,Struts2使用getModel自动获取正确的对象,或者必须在Action中为对象用户添加set / get方法,以便使用getter访问对象。

答案 2 :(得分:-1)

Jst使用要验证的字段名称...将您的代码更改为

addFieldError("UserName", "wtf!!!!");