使用 Struts 2 在 JSP 中动态工具提示

问题描述 投票:0回答:2

我正在尝试向一系列按钮添加工具提示。文本是动态的,因为它需要一个参数(显示带有页码的文本),该参数存储在

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'/>
作为工具提示文本。惊讶的是,这对我不起作用。

jsp struts2 internationalization ognl struts-tags
2个回答
1
投票

您不能在另一个标签属性内使用标签。使用

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}"/>

0
投票

以下内容来自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
的默认实现,并且可以使用上面的代码。

© www.soinside.com 2019 - 2024. All rights reserved.