別のJSPファイルを含める


161

私は現在JSPを学ぼうとしています。私の質問は、現在、私はページのヘッダーとフッターを含めるために使用していました:

<%@include file="includes/header.jsp" %>

そして

<%@include file="includes/footer.jsp" %>

しかし今、私はページのコンテンツも分離しました。したがって、ユーザーがページ(製品など)をクリックした場合、次の場所にあるJSPファイルをロードする必要があります。includes/pages/products.jsp つまり、ユーザーへのリンクは次のようになります<a href="index.jsp?p=products">Products</a>

したがって、p値を取得し、それに基づいてページを表示する必要があります。

以下は私がこれまでに行ったことです。

<%
 if(request.getParameter("p")!=null)
 { 
   String p = request.getParameter("p");
%>    

<%@include file="includes/page_name.jsp" %>

<% 
 }
%>

では、変数 "p"の値を "page_name"の位置に配置するにはどうすればよいですか?

または、私が使用できる他の方法はありますか?

PHPでは、include()またはを使用できますinclude_once()。私はこのJSPで少し行き詰まっています。:(


1
そこにページ名をハードコーディングしないのはなぜですか?とにかくPをチェックしている場合、宛先ページがp.jspになることがわかっているので、複雑にする理由はありますか?
kosa

返信いただきありがとうございます。一例でした。実際、私はページをいくつかに細分しました。たとえば、管理領域に製品ページがある場合、新しい製品の追加、製品の編集、製品の検索、製品の表示などを行うために、サブページに分かれています。したがって、各行をハードコーディングすると厄介に見えます。たとえば、自分の名前を10回だけ表示するには、ループを使用して印刷するか、10行を書き留めるかを選択できます。しかし、私は、ループを選択する方が良いと思います。ですよね?:私は、これが解決策になるかもしれないと思うstackoverflow.com/questions/482788/...
Akhilesh Bチャンドラン

回答:


231

あなたがやっていることは静的なインクルードです。静的インクルードはコンパイル時に解決されるため、実行時にのみ認識されるパラメーター値を使用できない場合があります。

必要なのは動的インクルードです:

<jsp:include page="..." />

スクリプトレットではなく、JSP ELを使用する必要があることに注意してください。また、index.jspを使用して中央コントローラーを実装しているようです。代わりにサーブレットを使用して、このサーブレットから適切なJSPにディスパッチする必要があります。それ以上に、StripesやSpring MVCなどの既存のMVCフレームワークを使用します。


1
あなたの提案をありがとう。:)私はjsp:includeタグを使用してみました。しかし、実行時に、ファイルが見つからないというエラーが発生します。例外の詳細:java.io.FileNotFoundException: /includes/&lt;%= p %&gt;.jsp<%= p %>ファイルパスでそのまま使用されているようです!
Akhilesh B Chandran

7
スクリプトレットを使用しないでください。JSP ELを使用します:page = "/ includes / $ {param.p}"。または、page = "<%=" / includes / "+ p%>"で試してください。
JB Nizet

3
ありがとうございました。私はそれを次のように使用しました:<jsp:include page="<%= "includes/" + p + ".jsp" %>" />そしてそれは今働いています:)
Akhilesh B Chandran

2
とても良い答えです!このパターン(index.jspの中央コントローラー)を何度も見たことがあり、常に問題が発生します。
Matthias Hryniszak 2013年

翻訳時間ではないですか?それでもパラメーターを使用できると思いますか?
Koray Tugay

26

あなたはそのようなパラメータを使うことができます

<jsp:include page='about.jsp'>
    <jsp:param name="articleId" value=""/>
</jsp:include>

そして

about.jspでは、パラメータを取得できます

<%String leftAds = request.getParameter("articleId");%>

18

インクルードディレクティブを使用できます

<%
 if(request.getParameter("p")!=null)
 { 
   String p = request.getParameter("p");
%>    

<%@include file="<%="includes/" + p +".jsp"%>"%>

<% 
 }
%>

またはJSPインクルードアクション

<%
 if(request.getParameter("p")!=null)
 { 
   String p = request.getParameter("p");
%>    

<jsp:include page="<%="includes/"+p+".jsp"%>"/>

<% 
 }
%>

異なるis includeディレクティブは、変換フェーズ中にファイルをインクルードします。一方、JSPインクルードアクションには、ページがリクエストされたときにファイルが含まれます。

物事を操作するコントローラーとして、Spring MVC Frameworkをお勧めします。パラメータの代わりにURLパターンを使用します。

例:

www.yourwebsite.com/products

の代わりに

www.yourwebsite.com/?p=products

このビデオを見るSpring MVC Framework


1
ビデオは保護されています。公開してください
AutoMEta

最初の例が実際に機能するかどうかを確認できますか?うまく動かないようです。
Jus12 2013年

8

ページ変換時に、includeディレクティブで指定されたファイルのコンテンツは、JSP includeディレクティブが使用されている場所にそのまま「貼り付け」られます。次に、ソースJSPページがJavaサーブレットクラスに変換されます。インクルードされるファイルは、静的リソースまたはJSPページにすることができます。通常、JSP includeディレクティブは、ヘッダーバナーとフッターを含めるために使用されます。

jspファイルを含めるための構文:

<%@ include file="relative url">

<%@include file="page_name.jsp" %>

6

1。<a href="index.jsp?p=products">Products</a>ユーザーがProductsリンクをクリックすると、products.jspを直接呼び出すことができます。

つまり、JSPファイルの名前をパラメーター値と同じに維持できます。

<%
 if(request.getParameter("p")!=null)
 { 
   String contextPath="includes/";
   String p = request.getParameter("p");
   p=p+".jsp";
   p=contextPath+p;

%>    

<%@include file="<%=p%>" %>

<% 
 }
%>

または

2.あなたは、キー、値のペアで外部リソースファイルを維持することができます。以下のように

products : products.jsp

customer : customers.jsp

プログラムファイルからJSPファイルの名前をプロパティファイルから取得できます。

これにより、JSPファイルの名前を簡単に変更できます


ありがとうございました。現時点では最初のものを使用しています。実際、これを行う方法に問題があります!
Akhilesh Bチャンドラン

org.apache.jasper.JasperException: /admin.jsp(239,44) PWC6117: File "/<%=p%>" not found。それはあなたの側でうまくいきましたか?
Akhilesh Bチャンドラン

これは、ファイルがurパスに存在する場合のパス関連の問題チェックです。コンテキストパスが含まれていないと思います(includes / admin.jspである必要があります)。entrescenerio my side
Balaswamy Vaddeman

1
「p」の値をエコーし​​てみました。それは:includes/add.jspです。次に、これをインクルードデリバティブで使用します<%@ include file="includes/add.jsp" %>。ページ内容を表示します。しかし、この行を代わりに使用すると<%@ include file="<%=p%>" %>、例外が表示されます。
Akhilesh B Chandran

こんにちは、私は同じ問題を抱えています。エラーが発生しましたFile "<%=p%>" not found。実際の値を使用する場合、それは機能しています。
レディSK

0

理由がまだわからないので<%@include file="includes/footer.jsp" %>index.jsp当時使用してregister.jspいたような他のjspファイルでthen を使用した後<%@ include file="footer.jsp"%>。フルパスを使用する必要がなくなったことがわかるように、STSには最初のパスが保存されていました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.