我对web很陌生,我正在应用程序引擎上尝试Thymeleaf模板引擎。到目前为止,它运行得很好,只是当我尝试方法(相对于简单属性)访问时,总是会得到异常。
例如,使用这行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) 这既发生在dev服务器(Win Vista)上,也发生在GAE SDK的1.9.0和1.8.9的生产中。我已经尝试过当前的TL (2.1.2)和以前的版本(2.0.20)。我不使用Spring。
我发现其他人在TL论坛上有反射问题(这里和这里),但没有任何帮助。
一些使用Struts或Spring的人很久以前就遇到了类似的问题,并通过设置OgnlRuntime.setSecurityManager(null)来解决这些问题。我之所以没有这样做,是因为我看不出如何在TL中访问OgnlRuntime对象,而且对我来说,我是唯一需要这样做的TL用户也没有什么意义。
从OgnlRuntime v3.0.6 (此处)的角度来看,最简单的解决方案似乎是禁用“checkPermission”,但作为TL新手,我不太愿意做TL不公开的更改,而且其他使用TL的人似乎也不需要这样做。一定还有什么不对劲吗?
发布于 2014-03-11 14:18:10
最后,我继续使用OgnlRuntime.setSecurityManager(null)选项。这似乎是个坏主意,但我现在可以继续下去了。
下面是我使用的代码:
public class MyContextListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent arg0) {
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
OgnlRuntime.setSecurityManager(null);
}
}在我的web.xml中,我补充道:
<listener>
<listener-class>com.myapp.MyContextListener</listener-class>
</listener>https://stackoverflow.com/questions/22314530
复制相似问题