0

私のアプリケーションは以前、jsp 2.0 カスタム タグを広範囲に使用していました。オブジェクトをリクエスト スコープに手動で設定する必要がないため、jsp:includes よりもこれらを優先しました。ただし、カスタム タグには、動的に呼び出すことができないという 1 つの大きな制限があります。このサイズのアプリケーションでは、代わりに jsp:includes を使用する必要があります。

したがって、次のようなコードがたくさんあります。

<c:set var="product" value="${product}" scope="request" />
<jsp:include page="${product.name}.jsp" />
<c:remove var="product" scope="request"/>

見栄えが悪いだけでなく、エラーが発生しやすいので、これをタグにカプセル化して、両方の長所を活用したいと考えました。これは、バックグラウンドで動的 JSP を呼び出すカスタム タグです。次のような「include」というカスタムタグを試しました:

<%@ attribute name="name" rtexprvalue="true" required="true" %>
<%@ attribute name="value" rtexprvalue="true" required="true" %>
<%@ attribute name="page" rtexprvalue="true" required="true" type="java.lang.Object" %>

<c:set var="${name}" value="${value}" scope="request" />
<jsp:include page="${page}" />
<c:remove var="${name}" scope="request"/>

しかし、c:set は var タグで式を許可しないため、機能しません。どうすればこれを機能させることができますか?私たちのアプリケーションにとって価値があるという理由だけで、このタグのスクリプトレットに頼るつもりです。

ただし、理想的には、次のように無制限の数のパラメーターを受け入れるタグを記述できるようにしたいと考えています。

<i:include product="${product}" order="${order}" page="${product.name}.jsp"/>

しかし、私はそれを行う方法がわかりません。どんなアドバイスも素晴らしいでしょう。ところで、この例は見せかけだけのものなので、それにとらわれないでください。それは私が伝えたい考えです。

4

1 に答える 1

0

より良い実装がないため、スクリプトレットを使用しました。

<%@ attribute name="page" rtexprvalue="true" required="true" %>
<%@ attribute name="name" rtexprvalue="true" required="true" %>
<%@ attribute name="value" rtexprvalue="true" required="true" type="java.lang.Object" %>

<% request.setAttribute(name, value); %>
<jsp:include page="${page}" />
<% request.removeAttribute(name); %>
于 2012-08-07T18:51:57.400 に答える