我使用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文档中看到他们通常使用第二种方法来访问操作属性
<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属性不在action本身内部使用,仅在JSP中使用。
publisherComponent.getPublisher()
检索了&#34;发布者&#34;来自MySQL的实例,DAO函数正常工作(单元测试成功,<s:property value="name" />
也返回正确的名称值。)
答案 0 :(得分:0)
如果您使用的是<s:property>
标记,那么仅当您仅使用属性名称而不使用getter或settter方法时,它才会起作用。在内部,它使用getter方法来映射您的属性值。
因此第二个<s:property value="name" />
被正确实现。始终遵循这种方法。