JSTL、Bean、およびメソッド呼び出し
質問
私はJSPで作業しており、Beanからのオブジェクトのメソッドを呼び出す必要があります。前のバージョンのページはJSTLを使用せず、正常に動作します。私の新しいバージョンには次のような設定があります:
<jsp:useBean id="pageBean" scope="request" type="com.epicentric.page.website.PageBean" />
<c:set var="pageDividers" value="<%= pageBean.getPageDividers() %>" />
<c:set var="numColumns" value="${pageDividers.size()}" />
変数 pageDividers
は List
オブジェクトです。
この問題が発生しています: pageDivider
のサイズを要求すると、例外がスローされます。これは単純なJTSLエラーであることがわかっています-何が間違っていますか?
エラーメッセージ:
デフォルトの名前空間が指定されていない場合は、関数サイズにプレフィックスを付けて使用する必要があります
pageDividers
オブジェクトのメソッドに正しくアクセスまたは呼び出すにはどうすればよいですか?
解決
JSTLのプロパティアクセスにドット演算子を使用すると、 $ {pageDividers.size}
(()は不要)により、 getSize()
。
java.util.Listには( getSize()
ではなく) size()
というメソッドが用意されているため、そのコードを使用してリストの長さにアクセスすることはできません。
リストサイズにアクセスするために、JSTLは次のように使用される fn:length 関数を提供します
${fn:length(pageDividers)}
fn 名前空間を使用するには、次のように宣言する必要があることに注意してください
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
さらに、同じ関数を任意のコレクションタイプ、および文字列でも使用できます。
他のヒント
ELを使用してBeanのプロパティにアクセスするには、プロパティに名前を付けるだけです(メソッドを呼び出しません)。 BeanにgetSize()というメソッドがあるとします
${pageDividers.size}
通知なし()。
編集:申し訳ありません...元の投稿でエラーが発生しました。