我正在学习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;
}
}
答案 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!!!!");