2013-02-13 48 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訪問對象。