学习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;
}
}