Jsp 显示属性名而不是值的getText

Jsp 显示属性名而不是值的getText,jsp,struts2,Jsp,Struts2,在过去一周左右的时间里,我开始学习Struts 2,并在使用TextProvider接口的示例中遇到了难题。我有一个简单的类(TextExampleAction.java),它只返回成功字符串。下面是action类的源代码: package com.packt.s2wad.ch03.i18n; import org.apache.log4j.Logger; import com.opensymphony.xwork2.ActionSupport; public class TextExam

在过去一周左右的时间里,我开始学习Struts 2,并在使用TextProvider接口的示例中遇到了难题。我有一个简单的类(TextExampleAction.java),它只返回成功字符串。下面是action类的源代码:

package com.packt.s2wad.ch03.i18n;

import org.apache.log4j.Logger;

import com.opensymphony.xwork2.ActionSupport;

public class TextExampleAction extends ActionSupport implements TextInterface {
    private static Logger log = Logger.getLogger(TextExampleAction.class);
    public String execute() throws Exception {
        log.debug(getText("from.class.props"));
        return SUCCESS;
    }
}
下面是JSP文件(text example.JSP)的源代码:


通过属性标记从TextExampleAction.properties,使用getText(…)
我的属性文件与我的Java类(TextExampleAction.properties)命名相同,并且位于同一个包中。以下是该文件的内容:

from.class.props=你好,来自TextExample.properties

当我查看页面时,将显示以下内容:

通过属性标记从TextExampleAction.properties,使用getText(…) 来自.class.props

所以我只是想弄明白为什么它会为那个属性返回一个空值

编辑:


我无法在Struts 2.3.1中重现此问题

  • 确保属性和类文件名为
    TextExampleAction
    (扩展名正确)
  • 确保属性文件位于war文件本身的完全相同的包层次结构中
例如,下面是我的Maven输出:

s231_01_war_exploded
        |-- index.jsp
        `-- WEB-INF
            |-- classes
            |   |-- actions
            |   |   |-- TextExampleAction.class
            |   |   `-- TextExampleAction.properties
            |   |-- log4j.properties
            |   `-- struts.xml
            |-- jsp
            |   `-- test.jsp
            |-- lib
            |   `-- (all the libs)
            `-- web.xml
这正如预期的那样有效


查看项目后编辑

未部署S2配置文件
struts.xml

此外,在repo中,您没有通过自己的操作运行任何请求,只有默认的S2转发操作—您不会获取任何打包的I18N文件,因为它们不存在于默认操作的包中


我真的建议不要通过Ant这样做,而是按照书中的建议使用Maven,尽管在本例中唯一缺少的是
struts.xml
文件。正如您的
build.xml
当前所示,将
struts.xml
放在源目录的根目录下。

我刚刚尝试了它,但它仍然没有显示属性值。奇怪……它对我有效。我只是交叉检查了它。这是我的jsp中的条目
我添加了调试标记的输出…奇怪的是,你能显示Action类吗?只是交叉检查一下,你命名了吗属性文件正确,并且已将文件放置在正确的位置。即使您不需要使用
%{}
符号,您的示例也应该可以工作。我认为这主要是由于struts.xml位置,因为在使用struts2-blank.war getText()创建新项目后工作正常。@Brian Gotcha。通过Ant完成所有这些都是非常粗略的,除非您使用Ivy之类的工具进行依赖关系管理,顺便说一句——很容易忽略依赖关系。对于简单的用例,你不应该太麻烦Maven——IMO也可以使用它。这是巧合还是你碰巧写了AS2 Web App开发书()?@Brian,那就是我。我为他们的编辑和索引表示歉意——这太糟糕了:/
s231_01_war_exploded
        |-- index.jsp
        `-- WEB-INF
            |-- classes
            |   |-- actions
            |   |   |-- TextExampleAction.class
            |   |   `-- TextExampleAction.properties
            |   |-- log4j.properties
            |   `-- struts.xml
            |-- jsp
            |   `-- test.jsp
            |-- lib
            |   `-- (all the libs)
            `-- web.xml