2016-12-04 3 views
0

私はjspプロジェクト(Springではなく)の変更を担当しています。変更は非常に簡単です: ページ上のリンクの静的リストを取得し、それらのリンクで構成されるドロップダウンに置き換えます。もう1つの要件は、ドロップダウンのデータソースがプロパティファイルであることです。彼らは、サイトのエンドユーザ(内部プロジェクト)がアプリケーションを再デプロイする必要なしにリンクを修正/削除できるように、これを必要とします。私は約10年または12年前にjspの簡単な紹介をしたjavascriptの男(AngularJS、EmberJS、jQueryなど)です。足を濡らすために、私はIntelliJをダウンロードし、Tomcatプロジェクトをセットアップし、それを読み込んでプロパティファイルにいくつかの値を表示させました。 WooHoo !.これまでのところ、数時間でグーグルが見つかった。私はjspを使用して選択を構築するコードを見つけましたが、プロパティファイルをレイアウトし、選択項目のオプション/値として使用できるキー/値のペアを読み込む方法はわかりません。jspプロパティファイルからselectを設定する

はここに私の性質は、ファイルの:

<%@page import="java.util.Properties" %> 

<% 
InputStream stream = application.getResourceAsStream("foo.properties"); 
Properties props = new Properties(); 
props.load(stream); 
String fname = props.getProperty("fname"); 
String lname = props.getProperty("lname"); 
%> 
<html> 
<head> 
<title>$Title$</title> 
</head> 
<body> 
<% 
out.println(fname); 
out.println(lname); 
%> 
</body> 

そして、それは正しくおさるのジョージが表示されます。

fname=Courious 
lname=George 

をここで値を表示するマークアップです。

プロパティファイルを使用して選択を作成する方法についてのガイダンスはありますか? おかげ

答えて

2

私はこのように進行する:(キーと値はJSP-ELでアクセスが容易であるため)の特性(あなたがやったように)

  • マップを埋める

    1. 負荷keyとを使用して、オプションタグを移入
    2. (コアJSTLで)マップを反復
    3. (JSP-ELからアクセス)ページ属性にマップを設定このよう

    <%@ page contentType="text/html; charset=UTF-8" 
        import="java.io.InputStream, java.util.HashMap, java.util.Properties" %> 
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
    
    <% 
    // 1. load the properties 
    InputStream stream = application.getResourceAsStream("foo.properties"); 
    Properties props = new Properties(); 
    props.load(stream); 
    
    // 2. fill a map 
    HashMap<String, String> linkMap = new HashMap<String, String>(); 
    for (final String name: props.stringPropertyNames()) { 
        linkMap.put(name, props.getProperty(name)); 
    } 
    
    // 3. set the map in a page attribute 
    pageContext.setAttribute("linkMap", linkMap); 
    %> 
    <html> 
    <head> 
    <title>$Title$</title> 
    </head> 
    <body> 
    <h3>select field with map</h3> 
    <select name="link"> 
    
    <!-- 4. iterate through the map --> 
    <c:forEach items="${linkMap}" var="link"> 
        <!-- 5. populate the option tags --> 
        <option value="${link.key}">${link.value}</option> 
    </c:forEach> 
    </select> 
    </body> 
    

    JSPでスクリプトレットを使うのは悪い習慣です。
    サーブレット内のコードを<% ... %>からJPSに転送することを検討する必要があります。

    編集:

    JSPは情報の提示にのみ使用してください。準備、計算、データベースアクションなどは、サーブレットで行う必要があります。
    あなたがここで詳細を読むことができます:あなたのケースではHow to avoid Java code in JSP files?

    を: あなたがサーブレットを作成し、名前を付けPrepareLinkList、そこの上からスクリプトレットコードを移動することができます:

    @WebServlet("/PrepareLinkList") 
    public class PrepareLinkList extends HttpServlet { 
        private static final long serialVersionUID = 1L; 
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
         InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("testingThings/properties/foo.properties"); 
         Properties props = new Properties(); 
         props.load(stream); 
    
         HashMap<String, String> map = new HashMap<String, String>(); 
    
         for (final String name: props.stringPropertyNames()) { 
          map.put(name, props.getProperty(name)); 
         } 
    
         // make the linkMap attribute available accross the application 
         getServletContext().setAttribute("linkMap", map); 
         // response.sendRedirect("dropdown.jsp"); 
         // or 
         // request.getRequestDispatcher("dropdown.jsp").forward(request, response); 
        } 
    
    } 
    

    とJSPでのみ滞在をプレゼンテーション:あなたが知っているを見たよう

    <%@ page contentType="text/html; charset=UTF-8" %> 
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
    <html> 
    <head> 
    <title>$Title$</title> 
    </head> 
    <body> 
    
    <h3>with map</h3> 
    
    <select name="link"> 
    <c:forEach items="${linkMap}" var="link"> 
        <option value="${link.key}">${link.value}</option> 
    </c:forEach> 
    </select> 
    
    </body> 
    

    はあなたが実行一度 PrepareLinkListサーブレット、およびにアクセスすることができますは、JSP/Servletの次のすべての要求に含まれます。コードの繰り返しが少なく、保守が容易です。 1の実行がUpdateLinksProperties -Servlet

  • +0

    感謝を言うことができます後、あなたの場合は

    、私はそれを得た、PrepareLinkListを/早送り/実行含めることができます。しかし、私はこれが何を意味するのか分かりません: "コードを<% ... %>からサーブレットの中に移動し、JPSに転送することを検討するべきです" – Lazloman

    +0

    どうもありがとう。 – Lazloman

    関連する問題