17171


Springで、Viewを変数を用いて作成しようと思っています。  
複数のviewで使用するViewをまとめるため、

index.jsp

[code]

    ... 略
    <c:forEach items="${dto_list}" var="dto">
        <c:import url="./common.jsp">
            <c:param name="dto" value="${dto}" />
        </c:import>
    </c:forEach>
    
[/code]

common.jsp

[code]

    ... 略
    <div class="object">${param.dto}</div>　<!-- これはオブジェクトが表示される -->
    <div class="name">${param.dto.name}</div> <!-- これは「ネームプロパティーがありません」となる -->
    <c:forEach items="${param.dto.fields}" var="${field}" > <!-- これもだめ -->
        <div class='field_name'>${field.name}</div>
        <div class='field_value'>${field.value}</div>
    </c:forEach>
    
[/code]

となります。  
EL式で2階層以上さかのぼる為にはどのような実装を行えばいいのでしょうか？


CC BY-SA 3.0
2015-09-20T11:58:07.900
16799
2015-10-02T05:14:05.097
8396
question
jsp
JSPで、EL式で再帰的に変数を参照する方法


<http://d.hatena.ne.jp/hayashi_77/20090924/1253798041>

このサイトが参考になるかもしれません。


CC BY-SA 3.0
2015-10-02T02:29:21.837
17165
2015-10-02T02:29:21.837
12532
16799
answer


JSTLの <c:import>を使ってオブジェクトをやり取りする場合には、<c:import>の前に、<c:set>
を使ってリクエスト属性に渡したいオブジェクトを格納しておくとうまくいくでしょう。

[code]

    <c:set var="send" value="${dto}" scope="request"></c:set>
    <c:import url="import.jsp"></c:import>
    
[/code]

こうすることで、import.jspでは、

[code]

    <c:out value="${send.name}"></c:out>
    
[/code]

などで出力できます。

というのも、<c:import> の中で渡す <c:param> は、リクエストパラメータとなり、つまり文字列(String)になってしまいます。

一見オブジェクトが渡っているようにみえても、それは元JSPが文字列化したものが出力されています。なお、importされるJSPにてparamをお使いですが、paramは暗黙オブジェクトであるリクエストパラメータの集合ですので、やはり文字列として受け取っています。  
オブジェクトを辿って値を取得することはできません。


CC BY-SA 3.0
2015-10-02T05:14:05.097
17171
2015-10-02T05:14:05.097
5778
16799
answer