オブジェクトをインスタンス化するスクリプトレットを含むJSPページがあります。キャッシュを使わずにそのオブジェクトをJSPタグに渡したいのですが。
たとえば、私はこれを達成したいと思います:
<%@ taglib prefix="wf" uri="JspCustomTag" %>
<%
Object myObject = new Object();
%>
<wf:my-tag obj=myObject />
キャッシュ(ページ、セッション、servletcontext)のいずれかと直接対話することを避けようとしています。むしろ、タグにそれを処理させたいと思います。
ここで探した少し異なる質問:「オブジェクトをタグファイルに渡すにはどうすればよいですか?」
回答:属性ディレクティブの「type」属性を使用してください。
<%@ attribute name="field"
required="true"
type="com.mycompany.MyClass" %>
タイプ デフォルトはJava.lang.String であるため、タイプStringからフィールドが見つからないというオブジェクトフィールドにアクセスしようとすると、エラーが発生します。
<jsp:useBean id="myObject" class="Java.lang.Object" scope="page" />
<wf:my-tag obj="${myObject}" />
JSPページでスクリプトレットを使用することはお勧めしません。それはテンプレート言語の目的を殺します。
元の構文は「<%=%>」を再利用することでした
そう
<wf:my-tag obj="<%= myObject %>" />
例については、 Sun Tag Libraryチュートリアルのこの部分 を参照してください。
私にとって、式言語は、たとえばページコンテキストに配置するなどして、その変数にアクセスできるようにした場合にのみ機能します。
<% Object myObject = new Object();
pageContext.setAttribute("myObject", myObject);
%>
<wf:my-tag obj="${myObject}" />
それ以外の場合、tasはnullを受け取ります。
そして<wf:my-tag obj="<%= myObject %>" />
追加の作業なしで動作します。また、<%=%>はjspコンパイル時の型検証を提供しますが、Elは実行時にのみ検証されます。
「<%=%>」を使用して、タグで直接オブジェクト値を取得できます。
<wf:my-tag obj="<%= myObject %>"/>
そのオブジェクト内の任意の変数の値を取得するには、次のような「obj.parameter」を使用して取得できます。
<wf:my-tag obj="<%= myObject.variableName %>"/>
表現言語を使用する:
<wf:my-tag obj = "$ {myObject}" />