私のアプリケーションは以前、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"/>
しかし、私はそれを行う方法がわかりません。どんなアドバイスも素晴らしいでしょう。ところで、この例は見せかけだけのものなので、それにとらわれないでください。それは私が伝えたい考えです。