【问题标题】:JSP's displaying property name instead of value after form submission in Struts 2JSP在Struts 2中提交表单后显示属性名称而不是值
【发布时间】:2013-04-12 11:03:20
【问题描述】:

我有一个包含大量s:texts:property 的JSP。还有一些s:iterator's 里面有s:text's。我面临的问题是,一旦我提交表单并尝试在同一个 JSP 上显示某些内容,所有用于显示与属性相对应的值的 s:texts:property 开始仅显示属性名字。

喜欢

login.username=Username

JSP:

<s:text name="login.username" />

在提交表单并返回到同一个 JSP 时,属性名称:login.username 会显示在它用于显示 Username 的页面上。知道为什么吗?

【问题讨论】:

  • 也发布您的 Action 和 struts.xml,并尝试使用 getText():stackoverflow.com/questions/711093/…
  • getText() 使用对我来说效果很好。但是在初始页面加载时,简单的 就足够了,而在表单提交时加载同一页面后情况并非如此。为什么会这样?
  • 这里没有足够的信息来帮助诊断问题。

标签: java jsp struts2 internationalization


【解决方案1】:

操作堆栈上可能没有i18n 拦截器,或者您没有用于JVM 使用的语言环境或默认语言环境的资源包。

本质上,i18n 拦截器将语言环境推送到 ActionContext 映射每个请求。框架组件 支持本地化都使用 ActionContext 语言环境。


【讨论】:

  • 好吧,我认为这可能是原因 - 我的操作有一个与之关联的拦截器。 login.jsp 表单提交 -> 拦截器 -> LoginAction.java -> login,jsp 然后所有资源属性引用都是空的!当然,当我使用全局资源包时,这一切都起作用了,但我想知道是否有办法像以前一样访问 package.properties 并且在这种情况下仍然可以访问所有属性。
  • 这是来自localization guide的选项#5
  • 这是否意味着我必须重新定位我的 package.properties?我以前在 ~/com/example/login 下有它。我的操作在 ~/com/example/login/action 下,而我的拦截器在 ~/com/example/login/interceptor 下。您的意思是我需要将 package.properties 与 global.properties(com 文件夹的父级)放在同一文件夹中并摆脱 global.properties?
  • 遍历包层级没关系
【解决方案2】:

如果您为每个操作使用一个属性文件来存储您的 i18n 消息,那么您可能会遇到以下情况:

ActionA.java -> 1.jsp
ActionB.java -> 1.jsp
ActionA.properties (all i18n messages are defined only here)

在 ActionA 上一切正常,但在 ActionB 上提交后,stuts 找不到相应的 i18n 消息。

【讨论】:

  • 这不是我的情况,所以我尝试了对我有用的 getText 东西。
猜你喜欢
  • 2018-06-25
  • 1970-01-01
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
相关资源
最近更新 更多