私は次のjspを持っています:
<%@ page import="java.util.Arrays" %>
<%@ page import="java.util.List" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html><body>
<%!
private static class Test {
private String val2;
private String val1;
public Test(String v1, String v2) {
val1 = v1;
val2 = v2;
}
public String getVal1() {
return val1;
}
public String getVal2() {
return val2;
}
};
private static List<Test> ITEMS = Arrays.asList(new Test("1","1"),new Test("2","2"));
%>
<%
pageContext.setAttribute("ITEMS",ITEMS);
%>
<c:forEach var="item" items="${ITEMS}">
${item.val1},${item.val2}
</c:forEach>
</body></html>
TOMCATが実行すると、例外が発生します
javax.el.PropertyNotFoundException: Property 'val1' not readable on type java.lang.String
したがって、ELはコレクションを繰り返し処理しますが、何らかの理由でforEach内の${item}が文字列になります。
ただし、単にに変更private static class
すると、public static class
すべてが正常に機能します。
私たちには解決策があるので、それは問題ではないことを私は理解しています。しかし、この場合、なぜそれが公開を要求するのかわかりません。JSPはサーブレットに変換されるため、変換されたJavaコード内ではとにかくそれがわかります。ELは、オブジェクトのプロパティを取得するための単なるリフレクションのものではありません(この場合、プロパティはpublic
であるため、リフレクション修飾子をハッキングせずにELを使用できるはずです)。
誰かが知っているなら-応答してください。よろしくお願いします!前もって感謝します。