0

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

<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
4

1 回答 1

0

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

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

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

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

    request.setAttribute("Org_Items", Org_Items);
    

    但是,实际上,这种方式你根本不需要整体<jsp:useBean>。它只能在 EL 中直接通过${Org_Items}.

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

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

也可以看看:


与具体问题无关。这段代码包含一些不好的做法(使用scriptlet,不尊重Java 命名约定,使用<jsp:useBean>)。我建议学习如何分离关注点并查看我们的 servlets wiki 页面。它还包含一个带有验证和错误处理的示例。

于 2013-01-12T12:07:20.177 回答