14

別の JSP ファイルを含む JSP ファイルがあります。最初の JSP は、Java クラス (ウィジェット) のインスタンスを 2 番目の JSP ファイルに渡す必要があります。

これは私が持っているものです:

最初の JSP:

<jsp:include page="/container/SpecialWidget.jsp">
     <jsp:param name="widget" value="${widget}"/> // widget is a .Java POJO
</jsp:include>

2 番目の JSP:

${param.widget.id}

問題は、このコードでエラーが発生することです (ID がわからないというメッセージが表示されます)。「.id」の部分を省略した場合、ページには Java クラスの Java コードが出力されます。これは、クラスが正しく転送されたことを意味します。たとえば、${widget.id} の最初のページの ${widget} ルールを変更し、${param.widget} を印刷しようとすると、すべて正常に動作します。

私の質問: Java クラスを渡して、その属性を直接呼び出すことができないのはなぜですか? 私は何を間違っていますか?

編集: エラー メッセージ: 原因: javax.el.PropertyNotFoundException: プロパティ 'id' が java.lang.String 型で見つかりません

4

3 に答える 3

9

変数を渡すと、${widget}リクエスト時に文字列 ( widget.toString()) に変換されます。この値は、元の Java オブジェクトとしてではなく、文字列として 2 番目の JSP に渡されます。

オブジェクトの値にアクセスする 1 つの方法は、パラメーターの値を属性の値で設定することです。

<jsp:param name="widgetId" value="${widget.id}"/>

次に、2 番目の JSP で以下のコードを使用します。

${param.widgetId}

ウィジェットをリクエスト属性として設定し、2 ページ目で${widget.id}${request.widget.id} として使用することもできます。2 番目の方法を使用することをお勧めします。

于 2012-11-21T16:05:18.970 に答える
6

<jsp:param>パラメーターを HTTP 要求パラメーターとして渡します。これは文字列のみにすることができます。SotoString()がウィジェットで呼び出され、このメソッドの結果がパラメーターとして渡されます。

JSP インクルードを使用する代わりに、タグ ファイルとして実装された JSP タグを使用する必要があります。それらを定義する方法については、http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPTags5.htmlを参照してください。

例えば:

/WEB-INF/tags/specialWidget.tag 内のタグ定義:

<%@ tag %>
<%@ attribute name="widget" required="true" type="the.fully.qualified.name.of.WidgetClass" %>
TODO: add the HTML markup that must be displayed, using ${widget} to access the passed in widget attribute

任意の JSP でのタグの使用法:

<%@ taglib prefix="myTags" tagdir="/WEB-INF/tags" %>
...
Tada! I will use the specialWidget tag here, with widget as an attribute:
<myTags:specialWidget widget="${widget}"/>
于 2012-11-21T15:54:31.310 に答える