【问题标题】:Dynamic tooltip in JSP using Struts 2使用 Struts 2 的 JSP 中的动态工具提示
【发布时间】:2017-03-11 12:54:59
【问题描述】:

我正在尝试向一系列按钮添加工具提示。文本是动态的,因为它需要一个参数(显示带有页码的文本)并存储在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 的值)。它呈现为“&lt;s:text name='page.nr.tootip' ...”——换句话说,就是上面示例中引号中的确切文本。 我知道如何设置和使用动作类中的变量——但这在这里无济于事。 标题属性根本不呈现值“转到页面”。即使我只是写

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

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

【问题讨论】:

  • 你把title属性放在哪个标签上? pageNum 是什么?设置在哪里?

标签: jsp struts2 internationalization ognl struts-tags


【解决方案1】:

您不能在另一个标签属性中使用标签。使用&lt;s:text&gt; 标签的var 属性将值推送到值堆栈。然后使用OGNL在&lt;s:submit&gt;title属性中获取这个值。

<s:text var="pageTooltip" name="page.nr.tooltip">
    <s:param value="#pageNum"/>
</s:text>

<s:submit type="button" title="%{#pageTooltip}"/>

【讨论】:

    【解决方案2】:

    以下来自Strutslocalization guide

    struts.properties 中的全球资源 (struts.custom.i18n.resources)

    也可以通过编程方式指定全局资源包 作为语言环境。

    你也可以在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 的默认实现,并且可以使用上面的代码。

    【讨论】:

      猜你喜欢
      • 2012-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多