小弟在看马老师的struts2视频,在简单数据验证的那段视频中我做出来的效果同马老师的效果不一样,
我的效果为:
User Add Error! [Debug] 马老师的效果为:
User Add Error! 
name is error 
    name is error 
[Debug] 
我的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>
<constant name="struts.devMode" value="true" />
 <constant name="struts.i18n.encoding" value="GBK" /> 
        <package name="default" namespace="/user" extends="struts-default">
        <action name="user" class = "defaultaction.UserAction" >
            <result >
/user_add_success.jsp
            </result>
            <result name="error">
/user_add_error.jsp
            </result>
        </action>
    </package>
</struts>
我的java内容:
package defaultaction;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport{
private static final long serialVersionUID = 1L;
private String name;

public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String add() throws Exception {
if(name == null || !name.equals("action")){ this.addFieldError(name, "name is error"); return ERROR;
}
return SUCCESS;
}
}
我的jsp内容:
<?xml version="1.0" encoding="GB18030" ?>
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
<title>Insert title here</title>
</head>
<body>
User Add Error!
<s:fielderror fieldName="name" />
<br />
<s:property value="errors.name[0]"/>
<s:debug></s:debug>
</body>
</html>
老师给我说把jsp内容中的<s:fielderror fieldName="name" />改为<s:fielderror fieldName="a" />这样虽然结果是出来的,但是我觉得不对,应该,这样写的话当name为b的时候,那不是我又要把jsp的内容进行修改呢,如果有1万种选择那我不是死定了啊?还有就是jsp中得<s:property value="errors.name[0]"/>这句话的效果也没有显示出来,希望大家解释下我具体该怎么弄,谢谢了!

解决方案 »

  1.   

    void addFieldError(String fieldName, String errorMessage)  
      Add an error message for a given field.  this.addFieldError(name, "name is error");
    this.addFieldError("name", "name is error");楼主可明白了呢?第一个是用name的值作为属性名,你error.name,如果你name的值不等于name,当然是找不到的。所以这里你应该用的是字符串"name"表示,错误的属性名称。