2016-12-06 9 views
0

私は、dbからその値を取得するbean変数、つまりurlを持っています。また、動的引数をdbに渡すこともできます。ベースURLがhttps://test.com/myapp.actionある場合https://test.com/myapp.action?userid=${user.userId}user.userIdが今このurlビーン変数はこのJSP EL内でのJSP ELの解決

<a href="${url}"></a> 

問題のように、JSPに配置される別のBean変数である(渡された動的引数で)それがあることであるようにもすることができると言いますDOMで解決する場合はhttps://test.com/myapp.action?userid=${user.userId}となりますが、サーバーセッションでuser.userId="myuser"の場合はhttps://test.com/myapp.action?userid=myuserと解決します。

+0

を変更することが

  • 簡単に維持するために簡単に詳細情報を提供してください。許可されるものとされないものは何ですか?何が変わる可能性がありますか? –

  • 答えて

    0

    サーブレット内のURLの処理をいくつか行い、埋め込み式を解決できます。
    デモンストレーションのためだけにJSPを使用しました。 これは一般的な解決策ではありません。このケースのみを扱います。他の方法で複数のEL /プレースホルダでは機能しません。コードは、基本的に

    • は、区切り文字によって部品にURLを分割${}されない何

    • 埋め込まEL /プレースホルダを解決
    • 連結
    することにより、新しいURLを生成

    コード:

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
    <html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>JSP EL resolver</title> 
    </head> 
    <body> 
    <% 
    session.setAttribute("user.userId", "myuser"); 
    pageContext.setAttribute("url", "https://test.com/myapp.action?userid=${user.userId}"); 
    %> 
    
    url before preparation: <a href="${url}">${url}</a><br> 
    
    <% 
    String url = (String) pageContext.getAttribute("url"); 
    String[] parts = url.split("\\$\\{|\\}"); 
    
    String newUrl = parts[0]; 
    String userEL = parts[1]; 
    
    String sessionUser = session.getAttribute(userEL).toString(); 
    
    pageContext.setAttribute("url", newUrl + sessionUser); 
    %> 
    
    url after preparation: <a href="${url}">${url}</a><br> 
    
    </body> 
    </html> 
    

    出力:

    url before preparation: https://test.com/myapp.action?userid=${user.userId} 
    url after preparation: https://test.com/myapp.action?userid=myuser 
    

    これは解決策が、汚れたものです。

    よりよい解決策は次のようになります。パラメータ(名前と値)を追加し、いくつかのクラスを作成するDBまたはプロパティ・ファイル

  • で唯一のベースパスを保存

    特典は、

      です。
    • 少ない繰り返し、以下DB /ディスクストレージが無駄になります
    • ベースURLに
  • +0

    努力をいただきありがとうございます。しかし、私の場合、私はサーブレットで手続きを追加することはできません。これはすべてテンプレートコードの一部です。ちょうどカスケードEL解決を解決する方法を見つける必要があります – Rizstien

    +0

    HttpSessionAttributeListenerはどうですか?そこでEL-resolver-codeを動かすことができます。 attributeAdded()またはattributeReplaced()の場合。その値を適応させる。 –

    関連する問題