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

时间:2017-03-11 12:54:59

标签: jsp struts2 internationalization ognl struts-tags

我正在尝试向一系列按钮添加工具提示。该文本是动态的,因为它需要一个参数(显示带有页码的文本)并存储在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' ...” - 换句话说,就是上面例子中引号中的确切文本。 我知道如何设置和使用动作类中的变量 - 虽然这在这里没有用。 title-attribute根本不会呈现值“Go to page”。即使我只是写

<s:submit type="button" class="..."
       title="<s:text name='page.nr.tooltip'/>"

它显示<s:text name='page.nr.tooltip'/>作为工具提示文本。很惊讶这对我不起作用。

2 个答案:

答案 0 :(得分:1)

您不能在另一个标记属性中使用标记。使用var标记的<s:text>属性将值推送到值堆栈。然后使用OGNL在title的{​​{1}}属性中获取此值。

<s:submit>

答案 1 :(得分:0)

以下内容来自Struts localization guide

  

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>

此代码将消息文本呈现给out。如果需要将此文本设置为Struts标记属性之一,则应使用OGNL。不要在属性中嵌套Struts2标记。

<s:submit type="button" class="..."
   title="%{getText('page.nr.tooltip', {pageNum})}" />

要使用getText,该操作应实现TextProvider所针对的ActionSupport。如果您的操作类扩展为ActionSupport,那么您可以使用TextProvider的默认实现,并可以使用上面的代码。