javax.servlet.jsp.JspException: Cannot find bean users in any scope,错误始终改不了。不清楚导致此错误的原因是不是jsp版本问题。

addArticle.jsp<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%> 
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
 
<html> 
<head>
<title>JSP for AddArticleForm form</title>
</head>
<body>
<html:form action="/addArticle">
userid : 
<html:select property="userid">
  <html:optionsCollection property="users"
                          value="id"
                          label="username" />
</html:select>
<html:errors property="userid"/><br/>
content : <html:textarea property="content"/><html:errors property="content"/><br/>
<html:submit/><html:cancel/>
</html:form>
</body>
</html>
addArticleForm.java/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 */
package com.yourcompany.struts.form;import java.util.List;import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;import com.yourcompany.Userinfo;
import com.yourcompany.UserinfoDAO;/** 
 * MyEclipse Struts
 * Creation date: 11-06-2008
 * 
 * XDoclet definition:
 * @struts.form name="addArticleForm"
 */
public class AddArticleForm extends ActionForm {
/*
 * Generated fields
 */ /** userid property */
private int userid; /** content property */
private String content; //返回所有用户信息的列表
public List getUsers() {
return new UserinfoDAO().findAll();
}

/*
 * Generated Methods
 */ /** 
 * Method validate
 * @param mapping
 * @param request
 * @return ActionErrors
 */
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
if (content == null || content.length() == 0) {
content = "未输入内容!";
}
return null;
} /** 
 * Method reset
 * @param mapping
 * @param request
 */
public void reset(ActionMapping mapping, HttpServletRequest request) {
// TODO Auto-generated method stub
} /** 
 * Returns the userid.
 * @return int
 */
public int getUserid() {
return userid;
} /** 
 * Set the userid.
 * @param userid The userid to set
 */
public void setUserid(int userid) {
this.userid = userid;
} /** 
 * Returns the content.
 * @return String
 */
public String getContent() {
return content;
} /** 
 * Set the content.
 * @param content The content to set
 */
public void setContent(String content) {
this.content = content;
}
}
addArticalAction.java/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 */
package com.yourcompany.struts.action;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;import com.yourcompany.Article;
import com.yourcompany.ArticleDAO;
import com.yourcompany.Userinfo;
import com.yourcompany.UserinfoDAO;
import com.yourcompany.struts.form.AddArticleForm;/** 
 * MyEclipse Struts
 * Creation date: 11-06-2008
 * 
 * XDoclet definition:
 * @struts.action path="/addArticle" name="addArticleForm" input="/addArticle.jsp" scope="request" validate="true"
 */
public class AddArticleAction extends Action {
/*
 * Generated Methods
 */ /** 
 * Method execute
 * @param mapping
 * @param form
 * @param request
 * @param response
 * @return ActionForward
 */
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
//取出提交的表单数据
AddArticleForm addArticleForm = (AddArticleForm) form;
//创建用户
Userinfo userinfo = new UserinfoDAO().findById(addArticleForm.getUserid());
//创建文章
Article article = new Article();
article.setUserinfo(userinfo);
article.setUserid(addArticleForm.getUserid());
article.setContent(addArticleForm.getContent());
//保存
new ArticleDAO().save(article);
//转发
return mapping.findForward("success");
}
}
发生如下错误:
org.apache.jasper.JasperException: An exception occurred processing JSP page /addArticle.jsp at line 1310:  <html:form action="/addArticle">
11:  userid : 
12:  <html:select property="userid">
13:    <html:optionsCollection name="users"
14:                            value="id"
15:                            label="username" />
16:  </html:select>
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:524)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:417)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
com.yourcompany.CharFilter.doFilter(CharFilter.java:21)
root cause javax.servlet.ServletException: javax.servlet.jsp.JspException: Cannot find bean users in any scope
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:850)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
org.apache.jsp.addArticle_jsp._jspService(addArticle_jsp.java:96)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
com.yourcompany.CharFilter.doFilter(CharFilter.java:21)
root cause javax.servlet.jsp.JspException: Cannot find bean users in any scope
org.apache.struts.util.RequestUtils.lookup(RequestUtils.java:938)
org.apache.struts.taglib.html.OptionsCollectionTag.doStartTag(OptionsCollectionTag.java:219)
org.apache.jsp.addArticle_jsp._jspx_meth_html_005foptionsCollection_005f0(addArticle_jsp.java:206)
org.apache.jsp.addArticle_jsp._jspx_meth_html_005fselect_005f0(addArticle_jsp.java:172)
org.apache.jsp.addArticle_jsp._jspx_meth_html_005fform_005f0(addArticle_jsp.java:119)
org.apache.jsp.addArticle_jsp._jspService(addArticle_jsp.java:85)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
com.yourcompany.CharFilter.doFilter(CharFilter.java:21)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.14 logs.

解决方案 »

  1.   

    <html:optionsCollection property="users"
                                          value="id"
                                          label="username" />怎么和你报错的代码不一样?html:optionsCollection 好像需要 name 的,而且不能为null
      

  2.   

    Cannot find bean users in any scope 
      

  3.   

     <html:select property="userid">
                  <html:optionsCollection property="users"
                                          name="AddArticleForm"
                                          value="id"
                                          label="username" />
     </html:select>
    你既然将property属性定义了"users"
    应该在AddArticleForm.java文件中添加私有成员
             private List<LabelValueBean> users = null;
    并完成它的get()set()方法
            public List<LabelValueBean> getUserList() {
    return users;
    } public void setUserList(List<LabelValueBean> users) {
    this.users = users;
    }
      

  4.   

    不好意思 get()set()方法
    public List <LabelValueBean> getUsers() { 
    return users; 
    } public void setUsers(List <LabelValueBean> users) { 
    this.users = users; 
    }LZ对select标签的属性以及实现过程还是不太了解啊对于select标签显示的内容用property标示,value和label表示的是你所显示内容的属性。理解一下吧希望对你有帮助
      

  5.   

    我用了name试过,还是这个错误,这里的property或name代表什么?
      

  6.   

    没有name,那property当然不能使用了,如果用name的话,那users应该保存在pageContext,request,session,application中的任何一个,在这四个范围内如果没有的话,那当然会报错了
      

  7.   

    找了老师,解决了这个问题,谢谢各位。如果你是通过action和servlet转发的正确方式来访问这个jsp的,
    那么说明 users 对象可能为null
    需要检查原因,估计可能是 hibernate的映射文件写得不正确,或者实体类(vo)的定义不正确. 检查:
    1. 数据库的表是否一致?
    2. hbm.xml映射文件是否一致?
    3. 实体类是否一致?