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 を削除しようとしました。私のサーブレットには、すでに

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:BeanOrg_Itemsがスコープ内に見つかりません

属性の代わりに属性を使用し、指定されたスコープで目的のBeanインスタンスが使用できない場合、はこの<jsp:useBean>例外をスローします。typeclass

したがって、基本的に2つの解決策があります。

  1. 事前にBeanを目的のスコープに入れて、<jsp:useBean>見つけられるようにします。

    request.setAttribute("Org_Items", Org_Items);
    

    しかし、実際には、この方法では全体はまったく必要ありません<jsp:useBean>。によってELで直接利用できるようになります${Org_Items}

  2. class代わりに属性を使用<jsp:useBean>して、スコープ内に属性が見つからない場合に属性を自動作成します。FQNをに変更する必要があるのは、デフォルトのコンストラクターがないインターフェースであるためですjava.util.ArrayListjava.util.List

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

参照:


具体的な問題とは無関係です。このコードには、いくつかの不適切なプラクティスが含まれています(スクリプトレットを使用し、 Javaの命名規則を尊重せず、を使用し<jsp:useBean>ます)。関心の分離の方法を学び、サーブレットのwikiページを参照することをお勧めします。また、検証とエラー処理の例も含まれています。

于 2013-01-12T12:07:20.177 に答える