【问题标题】:struts property get attributestruts属性获取属性
【发布时间】: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 函数工作正常(单元测试成功,&lt;s:property value="name" /&gt; 也返回正确的名称值)。

【问题讨论】:

  • 请发布与此相关的 java 代码(名称的声明、getter 和 setter,以及代码中的任何其他 name / getName() 出现)
  • 您是否尝试过在getName 方法中使用断点进行远程调试?
  • 你是否在你的 struts.xml 中启用了静态方法调用,同时将开发模式设为 true 以查看你的更改

标签: java jsp tomcat struts2


【解决方案1】:

如果您使用&lt;s:property&gt; 标签,那么它只有在您只使用属性名称而不是getter 或settter 方法时才有效。在内部,它使用 getter 方法来映射您的属性值。 所以第二个&lt;s:property value="name" /&gt; 是正确实现的。始终遵循这种方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2014-01-17
    相关资源
    最近更新 更多