2011-07-18 6 views
2

することは、私たちのようなJSPで<c:import>文で変数を使用することができますどのような方法があります:JSPの文字列は、このように定義されて_header <c:import url="<%=_header%>"></c:import>は、。JSP - C言語でURLとして変数を使用します。import

// host will typically equal: uk.domain.com or fr.domain.com 
String host = request.getServerName(); 
// cc is attempting to become the country code for the domain 
String cc = host.substring(0, host.indexOf(".")); 

String _header = "http://assets.domain.com/" + cc + "/includes/header_" + cc + ".jsp"; 

複数の市場にまたがって多数のサイトをホストしています。このように1つのテンプレートを定義できることは、テンプレートの変更が少なくなるため理想的です。残念ながら、<c:import url="<%=_header%>"></c:import>を含めると、サーバーはページを読み込めません。

しかし、例えば、含む: <c:import url="http://assets.domain.com/uk/includes/header_uk.jsp?market=<%=cc%>"></c:import> が正常に動作するようです...

任意の考え?


編集:はURLで<%=cc%> varが実際に働いていませんでしたが判明。代わりにそれを働かせるために次のことをしなければならなかった。

String cc = host.substring(0, host.indexOf(".")); 
session.setAttribute("cc", cc); 

... 

<c:import url="http://assets.domain.com/uk/includes/header_uk.jsp"><c:param name="market">${cc}</c:param></c:import> 

はまだあなたが確実にスクリプトレットタグライブラリ/ ELとを混在させることはできません、まだしかし...

+0

何が起こりますか? – Bozho

+0

残念ながら、私たちが取り組んでいる環境を制御していないため、問題を絞り込むことはできません。サーバーがランタイムエラーを検出すると、ブラウザが404ページにリダイレクトされます。正確には役に立たない! – Alex

答えて

2

を変数URLの問題を解決していません。彼らは異なる瞬間と範囲で実行されます。どちらか一方を使用するかを選択する必要があります。 スクリプトレットの使用は、JSP 2.0(2003年11月リリース)以降、公式にdiscouragedであるため、完全に削除して、taglibs/ELのみを使用することをお勧めします。

スクリプトレット

<% 
    // host will typically equal: uk.domain.com or fr.domain.com 
    String host = request.getServerName(); 
    // cc is attempting to become the country code for the domain 
    String cc = host.substring(0, host.indexOf(".")); 
%> 

は次のtaglib/ELに置き換えることができます。

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 
... 
<c:set var="cc" value="${fn:split(pageContext.request.serverName, '.')[0]}" /> 

それはELで${cc}として利用できるようにします。

<c:import url="http://assets.domain.com/${cc}/includes/header_${cc}.jsp" /> 
+0

これは本当に知って素晴らしいです、ありがとう! taglibs/ELの読書を開始する時間! 私たちの誰もがJava/JSPで自信を持っているわけではないので、これは素晴らしい学習体験でした。 もし私が投票することができたら...私はスタックの初心者であるために私の気持ち! – Alex

+0

@Aito:右上の「Ask Question」ボタンを押し、詳細を詳しく説明します。 – BalusC

+0

@BalusC:あなたのソリューションは私にとってはうまくいかなかった。しかし、検索した後、私は問題を発見しました。タグファイルの中でそれを使用しようとしましたが、 'isELIgnored = "false"'フラグを入れなければ動作しません。だから、申し訳ありません、あなたは正しいです。投稿していただきありがとうございます! – Aito

関連する問題