2017-08-03 13 views
-1

我将项目中的一个从Struts 2.3.3升级到2.5.12,我发现在升级后的项目中<s:text />标记无法显示模型类中字段的值,而只是显示名称。当我使用Struts 2.3.3时,它工作得很好。Struts 2.5.12:文本标签显示模型类中字段的名称而不是值

我的Action类是这样的:

public class MyAction { 
    private Member member; 

    public Member getMember() { 
     return member; 
    } 
} 

我的模型类是这样的:

public class Member implements Serializable { 
    private Address address; 

    public Address getAddress() { 
     return address; 
    } 
} 

public class Address implements Serializable { 
    private String city; 

    public String getCity() { 
     return city; 
    } 
} 

在JSP中,我有:

<s:text name="member.address.city" /> 

输出I页面上看到的是​​,在那里我期待城市的价值。

我在调试模式下看到控件来到Address类的getCity()方法,而city字段的值为London,但它仍不会在UI中显示。

有谁知道这个问题是什么?

+0

''是为i18n。 –

回答

0

按照docs

如果在属性文件中找不到指定的消息,那么 体内的标签将被用作默认的消息。如果不使用主体,则可以搜索堆栈,如果返回值,则会将其写入 的输出。 如果堆栈中未找到任何值,则消息 的密钥将被写出

+0

Hi @RomanC,感谢您对此的回复。我没有从属性文件中读取值,而是从模型类中读取值。也正如我在问题中提到的那样,member.address.city字段具有伦敦的价值,我在调试模式下看到了相同的内容。但是键的名字仍然显示在屏幕上。任何想法为什么它不打印伦敦,但只是打印密钥的名称? – Prasann

+0

没有找到该值,struts标签正在打印该键,您可以尝试使用'getText()'而不是's:text'标签。 –

+0

嗨@RomanC,我看到标签能够显示正确的值。我在Struts 2.5.8的迁移指南中发现,标记有一个改进,因此默认情况下它不会针对ValueStack评估defaultMessage。这可能是问题。问题参考 - https://issues.apache.org/jira/browse/WW-4711 – Prasann

相关问题