日期:2014-05-20  浏览次数:20822 次

关于struts2 的一个问题
小弟在看马老师的视频,但是有个例子跟他的视频里面显示的结果不一样,想请教下大家。
我显示出来的结果是:
User Add Error! 

[Debug] 
而马老师的视屏中显示的结果是
User Add Error! 
  name is error
[Debug] 

name is error
我上课的时候问了下老师,他让我将对应的jsp文件中的<s:fielderror fieldName="name" />改为<s:fielderror fieldName="a" />虽然结果是出来了,但是我很是不能理解,如果真的是这样操作,当我下次在网页name中输入的不是a,而是不name不是要改为b么,如果有一万个选择,那我的写多少在后面啊,请大家给我说说。这个应该距地怎么改,还有jps中<s:property value="errors.name[0]"/>这句的效果也没有显示出来。


我的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>

------解决方案--------------------
这个问题仁兄你发了两个帖了,去JAVA WEB 版块发吧。这是JAVA SE版块。
------解决方案--------------------
LS+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"表示,错误的属性名称。