我正在尝试向一系列按钮添加工具提示。文本是动态的,因为它需要一个参数(显示带有页码的文本),该参数存储在
global.properties
:
page.nr.tooltip=Go to page {0}
我尝试了几种方法,但都不起作用:
title="<s:text name='page.nr.tooltip'>
<s:param value='pageNum' />
</s:text>"
我也尝试过设置一个变量并使用它:
<s:set var="ttStr" value="<s:text name='page.nr.tooltip'>
<s:param value='pageNum' />
</s:text>" />
但我似乎也无法将其用作工具提示文本。尝试过其中一个(以及更多)
value="ttStr"
value="$ttStr"
value="#attr[#ttStr]"
不会显示文本。 有什么建议吗? JavaScript 是不可能的,因为应用程序必须在关闭 JS 的浏览器中运行。
我可能错过了一些非常简单的东西......
我想我需要澄清一下:
pageNum
是我这样设置的变量:
<s:set var="pageNum" value="..." />
它是有效的,因为我可以使用它,并且它具有正确的值。我想将
pageNum
作为变量添加到工具提示文本中,如下所示:
<s:submit type="button" class="..."
title="<s:text name='page.nr.tooltip'>
<s:param value='pageNum' />
</s:text>">
...
这不会将工具提示呈现为
"Go to page 4"
(或 pageNum 具有的任何值)。它呈现为 "<s:text name='page.nr.tootip' ..."
- 换句话说,上面示例中引号中的确切文本。
我知道如何设置和使用操作类中的变量 - 但这在这里没有帮助。
标题属性根本不渲染值
"Go to page "
。即使我只是写
<s:submit type="button" class="..."
title="<s:text name='page.nr.tooltip'/>"
它显示
<s:text name='page.nr.tooltip'/>
作为工具提示文本。惊讶的是,这对我不起作用。
您不能在另一个标签属性内使用标签。使用
var
标签的 <s:text>
属性将值压入值堆栈。然后使用OGNL在title
的<s:submit>
属性中获取这个值。
<s:text var="pageTooltip" name="page.nr.tooltip">
<s:param value="#pageNum"/>
</s:text>
<s:submit type="button" title="%{#pageTooltip}"/>
以下内容来自Struts本地化指南:
全球资源 (
) 位于struts.custom.i18n.resources
struts.properties
也可以通过编程方式指定全局资源包 作为语言环境。
您还可以在
struts.xml
中设置常量
<constant name="struts.custom.i18n.resources" value="/resources/global"/>
变量
pageNum
应该有一个getter来返回参数的值
<s:text name='page.nr.tooltip'>
<s:param value='pageNum' />
</s:text>
此代码将把消息文本渲染到输出中。如果您需要将此文本设置为 Struts 标签属性之一,您应该使用 OGNL。不要将 Struts2 标签嵌套在属性内。
<s:submit type="button" class="..."
title="%{getText('page.nr.tooltip', {pageNum})}" />
要使用
getText
,该操作应该实现 TextProvider
ActionSupport
的用途。如果您的操作类扩展了 ActionSupport
那么您可以使用 TextProvider
的默认实现,并且可以使用上面的代码。