18265


以下のようなhtmlをjspで出力したいです。

[code]

    <ul id="item-list">
      <script type="text/html">
        <li><%=item.name%>: <%=item.msg%></li>
      </script>
    
      <li>山田: おはようございます</li>
      <li>田中: こんにちは</li>
    </ul>
    
[/code]

`script`の箇所を除く出力をする場合は以下のようにすれば良いと思います。

[code]

    <ul id="item-list">
      <%for(Item item: items){%>
        <li><%=item.name%>: <%=item.msg%></li>
      <%}%>
    </ul>
    
[/code]

しかし、今回は`<ul>`の内部に、`<script>`で括られた評価しないテキスト`<li><%=item.name%>:
<%=item.msg%></li>`を含めたいです。

つまり、以下のようにすれば良いことになります。

[code]

    <ul id="item-list">
      <script type="text/html">
        <li><\%=item.name%>: <\%=item.msg%></li>
      </script>
    
      <%for(Item item: items){%>
        <li><%=item.name%>: <%=item.msg%></li>
      <%}%>
    </ul>
    
[/code]

今回の例では、`<li>`の中身がシンプルなので何も問題がない気がしますが`<li>`の中身が複雑な場合にはほぼ同じHTMLを２度記述する必要が生まれます。

`<li>`部分を別ファイルに分けるというような処理を行わずに、このjspファイル単体で`<li>`部分の文字列を一度変数に入れるなどして、評価する場合としない場合の出力を同時に行うことはできますでしょうか？


CC BY-SA 3.0
2015-10-23T01:02:00.980
17960
2015-11-04T20:03:22.900
2015-10-23T03:22:53.360
5840
5840
question
java jsp
jspに記述したhtmlを評価せずに出力するには？


文字列を一度変数に入れる手段としてスタンダードタグライブラリであるcoreのsetを利用すればタグで囲まれた内容を変数に代入することができます。

[code]

    <c:set var=”変数名” [scope=”{page|request|session|application}”]>
        値 
    </c:set>
    
[/code]

そして、c:outを利用することで変数に代入した文字列を出力することができます。

[code]

    <c:out value="${変数名}" />
    
[/code]

しかし、評価する前の値と評価した後の値を出力する方法はおそらくありませんので、独自のtaglibを定義するしかないと思います。


CC BY-SA 3.0
2015-10-31T04:29:37.773
18265
2015-11-04T20:03:22.900
2015-11-04T20:03:22.900
8351
8351
17960
answer

[code]

    <%for(Item item: items){%>
       <li><%=item.name%>: <%=item.msg%></li>
    <%}%>
    
[/code]

の部分は、スタンダードタグライブラリの `forEach` でも書けますよ。

[code]

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <c:forEach var="item" items="${items}">
        <li><c:out value="${item.name}": <c:out value="${item.msg}"</li>
    </c:forEach>
    
[/code]

スタンダードタグライブラリやSpringのタグライブラリを使ったほうが、デフォルトでサニタイズされるので、`<%= %>` を使うより便利かな。


CC BY-SA 3.0
2015-11-01T14:49:34.007
18308
2015-11-01T14:57:15.247
2015-11-01T14:57:15.247
807
17960
answer