2013-02-13 58 views
1

我正在学习struts2,并面临一些问题,显示addFieldError消息..没有显示出来.. 当我运行我的项目,并留下userID字段为空它确实进入验证方法,甚至满足条件isEmpty方法,但它不显示任何错误消息。 我把一个sop statment在的isEmpty方法看,它正在进入或不.. 的statment被印在控制台中,URL变化../MyStruts/validation.action随地没有错误和没有进一步发生..addFieldError在Struts2中不工作

能有人告诉我我在哪里做错了.. 这里是我的代码..

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> 

Action类...

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; 
} 
    } 
+0

在这里得到了一些线索..如果我删除modeldriven接口的实现,并把userData和密码字段在myDataAction类,那么它工作正常..有人可以告诉我为什么这样吗? ..请有人尝试这个东西,并回复 – 2013-02-13 22:10:24

回答

2

您的形式:

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

Your field error:

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

看到区别?

另外:

  • 我希望你的代码是不实际格式化随机像;阅读起来非常困难。
  • 为什么User类扩展为ActionSupport?如果这不是一个行动,不要延伸基本的默认行动:这是毫无意义的,误导性的。
  • 考虑一些有意义的命名操作:大多数操作是“数据操作”。
  • 发布示例时,请注意修剪掉与特定问题没有直接关系的注释代码和内容。
+0

,但我认为拦截器使用户ID可用于所有jsp的,但不是对Action类..对不起,格式不好。实际上,我尝试了用户类中的valdate方法这就是为什么它存在..i在这里发布忘记删除它...对于代码格式的 – 2013-02-13 21:18:44

+0

抱歉,在选择文本后在Eclipse中CTRL + SHIT + F可能会有所帮助:) – 2013-02-13 23:27:05

+0

但是我的问题家伙怎么样.. – 2013-02-14 07:02:18

-1

JST用它来验证你的域的名字......我们的代码更改为

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

这是我六个月前说的,不是吗? – 2013-08-28 12:09:22

0

除了戴夫牛顿的反应,你必须删除“用户”。在addFieldError中,以便Struts2使用getModel自动获取正确的对象,或者您必须在Action中添加对象用户的set/get方法,以便使用getter访问对象。