【问题标题】:JSP PropertyNotFoundExceptionJSP PropertyNotFoundException
【发布时间】:2012-08-27 19:19:20
【问题描述】:

我有一个基于 Apache Tomcat + Hibernate 的应用程序。我有一个 MyModel 类和一个装饰 MyModel 类型对象的 MyViewModel 类。

当我收到请求时,我会在 Map 中返回多个 MyViewModel 实例。假设一个实例是 x。当我尝试访问${x.comments} 时,我得到一个属性未找到异常。

我仔细检查了 MyModel 是否包含 getComments() 和 setComments() 方法。 MyViewModel 还包含 getComments() 方法,该方法在装饰对象上调用 getComments(),如果返回 null,则返回空字符串。

现在令人惊讶的是,昨天当我在代码中的任何地方添加 cmets 字段时,这段代码仍然有效。我的数据库仍然有 cmets 字段。但不知何故,bean 没有被正确识别。

我已经对代码进行了一些更改,现在我正在使用 jquery-ui 来访问该页面,但我看不出这应该有什么不同,因为我可以访问除 cmets 字段之外的所有其他字段。

Hibernate 日志显示选择查询未获取 cmets 字段。

我尝试重新启动服务器,我的 Eclipse IDE 似乎没有任何工作。

你能帮我找出问题吗?

提前致谢!

【问题讨论】:

  • 如果使用Tomcat,停止tomcat,删除$TOMCAT_HOME/work/Catalina/*目录并重启tomcat。
  • 我的工作目录中没有任何内容。我有 apache-tomcat-7.0.29。
  • 另外,如果我将${x.comments} 替换为${x.another_field},它就可以正常工作。不知何故,没有正确识别到“cmets”字段的映射。是否有故障排除清单以确保 JPA 代码正确识别我的表字段?
  • 我发现 Eclipse 正在从工作区的 .metadata 目录运行 webapp。在那里找到 catalina 目录,将其删除。重新启动了服务器。还是不行:(
  • 还尝试将服务器运行位置切换到原始 Apache Tomcat 安装目录。没有帮助...

标签: java hibernate jsp spring-mvc managed-bean


【解决方案1】:

修好了!

MyViewModel 类缺少默认构造函数。

为什么我没能早点发现?

我在 WEB-INF/lib 下有一组旧的 jar 文件。但是,当我在 Eclipse 中配置项目时,我在单独的目录中下载了较新版本的 jar 文件并将它们添加到构建路径,但我的 WEB-INF/lib 仍然包含旧的 jar 文件。我最终打算拥有新版本,但由于一切正常,我没有打扰。

现在不知何故,这昨天还在工作,但我可能在提交之前做了某种“清理”。我一定是从 MyViewModel 中删除了默认构造函数。但是我可能在测试之前没有重新启动服务器,因此它工作正常。

理想情况下,这应该在部署过程中被捕获。但不知何故,新版本的罐子没有发现错误。当我切换到 WEB-INF/lib 目录中的 jar 时,服务器在初始化期间开始抛出异常,说缺少默认构造函数,因此无法初始化 bean。这解决了问题。

我试图重现这种情况。我删除了默认构造函数,将旧的 .classpath 文件放回项目目录中,它在部署期间不会捕获错误,但在运行时会失败。原因是 .classpath 中的一些依赖项不是必需的,也无法满足。所以 Eclipse 向我显示了一个红色感叹号(不是通常表示构建问题的十字符号)。我现在明白感叹号意味着我的项目存在验证错误,并且项目没有重新构建,因为构建路径包含缺少的依赖项。

所以我从构建路径中删除了缺少的依赖项,红色感叹号消失了。现在在部署过程中发现了错误。

不使用 Maven 实在是太可惜了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-01
    • 2012-05-13
    • 2015-09-19
    • 2012-08-02
    • 2015-03-02
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多