Tomcat 6.0は、generic arrayListを使用するために使用することを許可していません
-
19-09-2019 - |
質問
JSPファイルには、この宣言があります。
<jsp:useBean scope="request" id="products" class="java.util.ArrayList<sgt.supermarket.entity.Product>"/>
この宣言は、Glassfish 2.1で正常に機能しますが、Tomcat 6.0に切り替えると、例外がスローされます。
USEBEANクラス属性java.util.arrayListの値は無効です。
Tomcatに見逃されたライブラリは、Glass Fish 2.1とは異なる動作をしていますか?
解決
エルはパラメーター化されたタイプを知らないので、そうする必要はありません。 JSP/ELでは、それについてまったくコンパイル時間チェックがありません。エルは反射に基づいています。しかし、JSP/EL specifciationで指定されていないため、Glassfishで「機能する」ことに少し驚いています。
それとは別に、 jsp:useBean
まともなMVCアプリケーションではかなり余分です Servlet
リクエストを制御および前処理するために使用されます。
List<Product> procucts = productDAO.list();
request.setAttribute("products", products);
request.getRequestDispatcher("products.jsp").forward(request, response);
products
Elにアクセスできるようになりました ${products}
. 。 aは必要ありません jsp:useBean
.
他のヒント
レガシーコードを扱っていて、これらすべての生のJSP警告をすべて取り除きたい場合は、これにラインを置き換えることをお勧めします。
<% request.setAttribute("products",
new java.util.ArrayList<sgt.supermarket.entity.Product>()); %>
しかし、Baluscはまだ正しいです。古典的なMVCパターンを使用する場合、ビューではなくコントローラーでこの製品リストを作成することをお勧めします。また、ビューファーストパターンを使用している場合は、この製品リストを作成してクリーンJavaコードに記入する独自のJSPタグを作成することをお勧めします。
所属していません StackOverflow