无法使用usebean创建错误处理程序

时间:2013-01-12 07:28:19

标签: java jsp servlets

如何使用此代码检查下拉列表中是否没有值?

<td width="168"><select name="OrgType" class="txtbox" tabindex="1">
                            <option value="1">Please choose...</option>
                            <%
                                Iterator it2 = Org_Items2.iterator();
                                while (it2.hasNext())
                                {
                                    OrganizationItems orgItem2 = (OrganizationItems) it2.next();
                                    //EMSItems newsItem4 = new EMSItems();
                            %>
                            <option value=<%=orgItem2.getOrgTypeId()%>><%=orgItem2.getOrgTypeName()%></option>
                            <%
                                }
                            %>

                    </select></td>
                    <td width="120">
                        <%
                            if (errors.containsKey("OrgType"))
                            {
                                out.println("<span class=\"warning\">" + errors.get("OrgType") + "</span>");
                            }
                        %>
                    </td>

然后验证码

long OrgType = Integer.parseInt(req.getParameter("OrgType"));
    if ("1".equals(OrgType))
    {
        errors.put("OrgType", "Required");
    }
    else if(req.getParameter("OrgType") != null && !"".equals(req.getParameter("OrgType")))
    {
        long OrgTypeId = Integer.parseInt(req.getParameter("OrgType"));
        emsItem.setOrgTypeId(OrgTypeId);
    }

我在标题页中使用了usebean标记

<%@ page import="java.util.Iterator"%>
<%@ page import="data_registration_items.OrganizationItems"%>
<jsp:useBean id="Org_Items2" scope="request" type="java.util.List" />

但是当我试图将下拉列表的值保留为“请选择...”时,我收到了错误

java.lang.InstantiationException: bean Org_Items not found within scope
    org.apache.jsp.WEB_002dINF.jsp.organization_002dregistry_jsp._jspService(organization_002dregistry_jsp.java:79)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    web_registration.OrganizationServlet.doPost(OrganizationServlet.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    web.SecurityFilter.doFilter(SecurityFilter.java:55)

如何确认下拉列表是否传递了正确的值?


我试图删除标题中的usebean。在我的servlet中我已经有了

List<OrganizationItems> orgItems2 = new SetOrganizationType().OrgTypeList();
req.setAttribute("Org_Items2", orgItems2). 

在我的doGet方法下...

在我的jsp页面中,我输入相同的代码,错误显示

Org_Items2 cannot be resolved

在选项2中我也尝试过,但发生了错误

java.lang.ClassCastException: java.util.LinkedList cannot be cast to java.util.ArrayList

1 个答案:

答案 0 :(得分:0)

  

java.lang.InstantiationException:在范围

中找不到bean Org_Items

当您使用<jsp:useBean>将抛出该异常的type属性代替class属性和所期望的Bean实例的可用在指定范围。

所以基本上有两种解决方案:

  1. 事先将bean放在所需的范围内,以便<jsp:useBean>可以找到它。

    request.setAttribute("Org_Items", Org_Items);
    

    但是,实际上,这样你根本不需要整个<jsp:useBean>。它只能通过${Org_Items}直接在EL中使用。

  2. 请改用class属性,以便<jsp:useBean>自动创建一个(如果在范围内找不到)。您应该只将FQN更改为java.util.ArrayList,因为java.util.List具有作为接口的默认构造函数。

    <jsp:useBean id="Org_Items2" scope="request" class="java.util.ArrayList" />
    
  3. 另见:


    对具体问题

    无关。这段代码包含一些不良做法(using scriptlets,不尊重Java naming conventions,使用<jsp:useBean>)。我建议您了解如何区分问题并查看our servlets wiki page。它还包含一个验证和错误处理的示例。