【发布时间】:2015-01-29 06:16:49
【问题描述】:
我在使用 struts 2.3.3 和 spring 3.2.8 的 webapp 中遇到了一个奇怪的问题。
在我的一个 JSP 中,我试图检索我的操作的一个简单属性:
JSP:
<%@taglib prefix="s" uri="/struts-tags"%>
<s:property value="getName()" />
<s:property value="name" />
我已经在我的操作中定义了 getter getName() 和属性名称。
当我在 tomcat 7 中部署 webapp 时,有时第一个属性不会显示(完全为空),而第二个属性会正确呈现。 我只需要重新启动 tomcat 就可以同时工作了。
我怀疑存在初始化问题,但在 tomcat 日志中找不到任何内容。我什至试图从 tomcat 文件夹中删除预编译的 jsps 以强制重新编译。
过去有人遇到过类似的问题吗?
我在struts文档上看到他们通常使用第二种方法来访问action属性
<s:property value="name" />
我会尝试将所有调用移至此方法,但我想知道为什么有时两种方法都有效,而有时第一种方法却失败了...
UPD:
这里是动作代码:
public abstract AbstractAction extends ActionSupport implements ServletRequestAware, ServletResponseAware {
@Autowired
private PublisherComponent publisherComponent;
private String name;
/* ... */
public String getName() {
return publisherComponent.getPublisher().getName();
}
}
我所有的动作都是AbstractAction的子类。
name 属性不在动作本身内部使用,仅在 JSP 中使用。
publisherComponent.getPublisher() 从 MySQL 检索到一个“Publisher”实例,DAO 函数工作正常(单元测试成功,<s:property value="name" /> 也返回正确的名称值)。
【问题讨论】:
-
请发布与此相关的 java 代码(名称的声明、getter 和 setter,以及代码中的任何其他
name/getName()出现) -
您是否尝试过在
getName方法中使用断点进行远程调试? -
你是否在你的 struts.xml 中启用了静态方法调用,同时将开发模式设为 true 以查看你的更改