【问题标题】:Failed to make error handler using usebean使用 usebean 制作错误处理程序失败
【发布时间】:2013-01-12 07:28:18
【问题描述】:

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

<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

【问题讨论】:

  • 请帮我解决这个问题:(

标签: java jsp servlets


【解决方案1】:

java.lang.InstantiationException:在范围内找不到 bean Org_Items

当您使用type 属性而不是class 属性并且所需的bean 实例在指定范围内 可用时,&lt;jsp:useBean&gt; 将抛出此异常。

所以基本上有2个解决方案:

  1. 事先把bean放到想要的范围内,这样&lt;jsp:useBean&gt;就可以找到它。

    request.setAttribute("Org_Items", Org_Items);
    

    但是,实际上,这样你根本不需要整个&lt;jsp:useBean&gt;${Org_Items} 可以直接在 EL 中使用它。

  2. 改用class 属性,这样&lt;jsp:useBean&gt; 将在范围内找不到它时自动创建一个。您应该只将 FQN 更改为 java.util.ArrayList,因为 java.util.List 作为接口没有默认构造函数。

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

另见:


与具体问题无关。这段代码包含一些不好的做法(using scriptlets,不尊重Java naming conventions,使用&lt;jsp:useBean&gt;)。我建议学习如何分离关注点并查看our servlets wiki page。它还包含一个带有验证和错误处理的示例。

【讨论】:

  • 我试图删除标题中的 usebean。在我的 servlet 中,我已经有了 req.setAttribute("Org_Items2", orgItems2);
  • 所以您使用的是LinkedList 而不是ArrayList?将class 属性更改为java.util.LinkedList
猜你喜欢
  • 1970-01-01
  • 2011-07-15
  • 1970-01-01
  • 2012-02-09
  • 2015-04-13
  • 1970-01-01
  • 2019-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多