学习struts的一个例子,碰到这个异常,请大家帮忙,谢谢! 100

SS_ 2005-07-27 05:52:09
学习struts的一个例子,碰到这个异常,请大家帮忙,谢谢!

----------------异常显示内容为:
exception
org.apache.jasper.JasperException: Null attribute name
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:358)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1054)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1192)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:430)
javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)

root cause
java.lang.NullPointerException: Null attribute name
org.apache.jasper.runtime.PageContextImpl.findAttribute(PageContextImpl.java:495)
org.apache.struts.taglib.TagUtils.lookup(TagUtils.java:965)
org.apache.struts.taglib.TagUtils.lookup(TagUtils.java:1007)
org.apache.struts.taglib.logic.IterateTag.doStartTag(IterateTag.java:232)
org.apache.jsp.search_jsp._jspService(search_jsp.java:170)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1054)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1192)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:430)
javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)




我在使用过程中可以通过index页面链接到search页面,search页面输入的内容如果不对,相应的错误信息也能显示出来。但一旦输入正确的用户名例如Bob_Davidson 就会显示上面的异常,我把相关页面的代码帖上了(似乎有点长),大家愿意的话可以试验一下,初学struts,这个问题搞了老半天都没结果,大家就帮帮忙吧,再次感谢!

------------------所有相关文件如下(使用tomcat5)

------------------java文件
///////Employee.java
package test;

public class Employee
{
private String name;
private String ssNum;

public Employee(String name,String ssNum)
{
this.name=name;
this.ssNum=ssNum;
}

public void setName(String name)
{
this.name=name;
}

public String getName()
{
return name;
}

public void setSsNum(String ssNum)
{
this.ssNum=ssNum;
}

public String getSsNum()
{
return ssNum;
}
}

/////////SearchForm.java
package test;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

public class SearchForm extends ActionForm
{
private String name=null;
private String ssNum=null;
private List results=null;

public void setName(String name)
{
this.name=name;
}

public String getName()
{
return name;
}

public void setSsNum(String ssNum)
{
this.ssNum=ssNum;
}

public String getSsNum()
{
return ssNum;
}

public void setResults(List results)
{
this.results=results;
}

public List getResults()
{
return results;
}

//Reset form fields.
public void reset(ActionMapping mapping,HttpServletRequest request)
{
name=null;
ssNum=null;
results=null;
}

//Validate form data.
public ActionErrors validate(ActionMapping mapping,HttpServletRequest request)
{
ActionErrors errors=new ActionErrors();
boolean nameEntered=false;
boolean ssNumEntered=false;

//Determine if name has been entered.
if(name!=null&&name.length()>0)
{
nameEntered=true;
}

//Determine if social security number has been entered.
if(ssNum!=null &&ssNum.length()>0)
{
ssNumEntered=true;
}

//Validate that either name or social number has been entered.
if(!nameEntered&&!ssNumEntered)
{
errors.add(null,new ActionError("error.search.criteria.missing"));
}

//validate format of social security number if it has been entered.
if(ssNumEntered&&!isValidSsNum(ssNum.trim()))
{
errors.add(null,new ActionError("error.search.ssNum.invalid"));
}

return errors;
}


//Validate format of socail security number.
private static boolean isValidSsNum(String ssNum)
{
if(ssNum.length()<11)
return false;

for(int i=0;i<11;i++)
{
if(i==3||i==6)
{
if(ssNum.charAt(i)!='-')return false;
}
else if("0123456789".indexOf(ssNum.charAt(i))==-1)
return false;
}

return true;
}
}


////////SearchAction.java
package test;

import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public final class SearchAction extends Action
{
public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)
throws Exception
{
EmployeeSearchService service=new EmployeeSearchService();
ArrayList results;

SearchForm searchForm=(SearchForm) form;

//Perform employee search based on what criteria was entered.
String name=searchForm.getName();
if(name!=null&&name.trim().length()>0)
results=service.searchByName(name);
else
results=service.searchBySsNum(searchForm.getSsNum().trim());

//Place search results in SearchForm for access by JSP.
searchForm.setResults(results);

//Forward control to this Action's input page.
return mapping.getInputForward();
}
}

/////////////EmployeeSearchService.java
package test;

import java.util.ArrayList;

public class EmployeeSearchService
{
//Hard-coded sample data.Normally this would come frome a real data source such as a database.
private static Employee[] employees=
{
new Employee("Bob_Davidson","123-46-6789"),
new Employee("Mary_Williams","789-65-4312"),
new Employee("Jim_Smith","111-11-1111"),
new Employee("Beverly_Harris","222-22-2222"),
new Employee("Thomas_Frank","333-33-3333"),
new Employee("Jim_Davidson","444-44-4444"),
new Employee("Simon_xia","555-55-5555")
};

//Search for employees by name
public ArrayList searchByName(String name)
{
ArrayList resultList=new ArrayList();

for(int i=0;i<employees.length;i++)
{
if(employees[i].getName().toUpperCase().indexOf(name.toUpperCase())!=-1)
resultList.add(employees[i]);
}

return resultList;
}

//Search for employee by social security number.
public ArrayList searchBySsNum(String ssNum)
{
ArrayList resultList=new ArrayList();

for(int i=0;i<employees.length;i++)
{
if(employees[i].getSsNum().equals(ssNum))
resultList.add(employees[i]);
}

return resultList;
}
}
...全文
211 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
SS_ 2005-07-28
  • 打赏
  • 举报
回复
仔细检查了 laughsmile(海边的星空) 所说的代码,发现还真有问题 <logic:iterate id="result" property="searchForm" property="results"> 应该是<logic:iterate id="result" name="searchForm" property="results"> 原来是写错了一个单词,差点晕倒,很感激大家 的帮助,结贴!
laughsmile 2005-07-27
  • 打赏
  • 举报
回复
我觉得是这段代码的问题:
<logic:iterate id="result" property="searchForm" property="results">
<tr>
<td><bean:write name="result" property="name"/></td>
<td><bean:write name="result" property="ssNum"/></td>
</tr>
</logic:iterate>

result是results的一个元素,怎么会有name,ssNum属性?
AlexPark 2005-07-27
  • 打赏
  • 举报
回复
set 的名字与 get 时的不同

建义写个类里面全是public static final String name="---";

这样可以避免这个异常再次出现
loveyt 2005-07-27
  • 打赏
  • 举报
回复
是不是你在request.getAttribute或者session.getAttribute的时候要取得的属性名称没有写对或者事先没有设置这个名字的属性
dvictor 2005-07-27
  • 打赏
  • 举报
回复
异常不是告诉你了嘛 Null attribute name
SS_ 2005-07-27
  • 打赏
  • 举报
回复




------jsp页面文件
///////index.jsp

<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>

<html>
<head>
<title>minihr index.jsp file</title>
</head>

<body>
<font size=3>AAA,Inc.Human Resources Portal------index.jsp page</font>
<br>
<hr width=100% noshade=true>

• Add an Employee<br>
•<html:link forward="search">Search for Employees</html:link><br>

</body>
</html>

//////////search.jsp
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld/" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld/" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld/" prefix="logic" %>

<html>
<head>
<title>minihr search.jsp file</title>
</head>

<body>
<font size=3>AAA,Inc.Human Resources Portal------search.jsp page</font>
<br>
<hr width=100% noshade=true>

<html:errors/>

<html:form action="/search">
<table width="722" height="214" border="1" cellpadding="2" cellspacing="4">
<tr>
<td width="303"><bean:message key="label.search.name"/>:</td>
<td width="419"><html:text property="name"/></td>
</tr>
<tr>
<td> </td>
<td>----or----</td>
</tr>
<tr>
<td><bean:message key="label.search.ssNum"/>:</td>
<td><html:text property="ssNum"/>(xxx-xx-xxxx)</td>
</tr>
<tr>
<td> </td>
<td><html:submit/></td>
</tr>
</table>
</html:form>

<logic:present name="searchForm" property="results">

<hr width=100% noshade=true>

<bean:size id="size" name="searchForm" property="results"/>

<logic:equal name="size" value="0">
<center><font color=red><b>Inspite of you entered the name,but,No Employees Found</b></font></center>
</logic:equal>

<logic:greaterThan name="size" value="0">
<table border=1>
<tr>
<td>name</td><td>Social Security Number</td>
</tr>

<logic:iterate id="result" property="searchForm" property="results">
<tr>
<td><bean:write name="result" property="name"/></td>
<td><bean:write name="result" property="ssNum"/></td>
</tr>
</logic:iterate>

</table>
</logic:greaterThan>

</logic:present>
</body>
</html>


------------------配置文件
//////////web.xml

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
<display-name>Struts Examples Application</display-name>

<!-- Standard Action Servlet Configuration (with debugging) -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>

<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- The Usual Welcome File List -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>

<!--StrutsTag Library Descriptors-->
<taglib>
<taglib-uri>/WEB-INF/tlds/struts-bean.tld</taglib-uri>
<taglib-location>/WEB-INF/tlds/struts-bean.tld</taglib-location>
</taglib>

<taglib>
<taglib-uri>/WEB-INF/tlds/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/tlds/struts-html.tld</taglib-location>
</taglib>

<taglib>
<taglib-uri>/WEB-INF/tlds/struts-logic.tld</taglib-uri>
<taglib-location>/WEB-INF/tlds/struts-logic.tld</taglib-location>
</taglib>

</web-app>


/////struts-config.xml

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://struts.apache.org/dtds/struts-config_1_2.dtd">
<!--
Default configuration file for examples application.
Each module also has its own struts-config under: /WEB-INF/$MODULE/
@version $Revision: 1.9 $ $Date: 2004-09-06 19:50:06 -0700 (Mon, 06 Sep 2004) $
-->
<struts-config>
<form-beans>
<form-bean name="searchForm" type="test.SearchForm"/>
</form-beans>

<global-forwards>
<forward name="search" path="/search.jsp" />
</global-forwards>

<action-mappings>
<action path="/search"
type="test.SearchAction"
name="searchForm"
scope="request"
validate="true"
input="/search.jsp">
</action>
</action-mappings>

<!--Message Resources Configration-->
<message-resources parameter="test.ApplicationResources"/>

</struts-config>


------------------ApplicationResources.properties
/////////ApplicationResources.properties
# Label Resources
label.search.name=姓名
label.search.ssNum=社会保险号码

#Error Resources
error.search.criteria.missing=<li>Search Criteria Missing 查找标准错误</li>
error.search.ssNum.invalid=<li>Invalid Social Security Number 无效的社会保险号码</li>
errors.header=<font color="red"><b>Validation Error(s) 无效错误</b></font><ul>
errors.footer=</ul><hr width="100$" size="1" noshade="true">

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧