Я новичок в веб-разработке и пробую механизм шаблонов Thymeleaf в App Engine. До сих пор он работал нормально, за исключением того, что я всегда получаю java IllegalAccessException, когда пытаюсь получить доступ к методу (в отличие от простого атрибута).
Например, с этой строкой HTML:
<div class="panel" th:id="${item.getWebId()}">
Я получил:
java.lang.IllegalAccessException:
Method [public java.lang.String myapp.ItemInfo.getWebId()] cannot be accessed.
at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:851)
Это происходит как на сервере разработки (Win Vista), так и в рабочей среде с GAE SDK 1.9.0 и 1.8.9. Я пробовал текущий TL (2.1.2) и предыдущую версию (2.0.20). Я не использую Spring.
Я обнаружил, что другие имеют проблемы с отражением (здесь и здесь) на форуме TL, но ничего не помогает.
Некоторые люди, использующие Struts или Spring, давно столкнулись с подобными проблемами и решили их, установив OgnlRuntime.setSecurityManager(null). Я не занимался этим, потому что не вижу, как получить доступ к объекту OgnlRuntime в TL, и для меня не имеет особого смысла, что я буду единственным пользователем TL, которому это нужно.
Глядя на OgnlRuntime v3.0.6 (здесь) кажется, что самым простым решением было бы отключить «checkPermission», но опять же, как человек, новичок в TL, я не решаюсь вносить изменения, которые TL не раскрывает, и что никто другой, использующий TL, кажется, не должен этого делать. Должно быть что-то еще не так?
SecurityManager
в null выполняетсяSystem.setSecurityManager(null);
до загрузки классаOgnlRuntime
, но я бы не советовал этого делать. - person Tom Verelst   schedule 11.03.2014