struts属性获取属性

时间:2014-12-01 09:16:09

标签: java jsp tomcat struts2

我使用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" />也返回正确的名称值。)

1 个答案:

答案 0 :(得分:0)

如果您使用的是<s:property>标记,那么仅当您仅使用属性名称而不使用getter或settter方法时,它才会起作用。在内部,它使用getter方法来映射您的属性值。 因此第二个<s:property value="name" />被正确实现。始终遵循这种方法。