支持Apache Tiles中的动态和翻译标题

And*_*708 6 spring tiles el apache-tiles

我有一个使用Apache Tiles的Spring MVC项目.我已实现,以便可以从这样的消息源读取标题:

<tiles-definitions>    
    <definition name="some-definition" extends="public.base">
        <put-attribute name="title" value="some-definition.title" cascade="true" />
    </definition>
</tiles-definitions>
Run Code Online (Sandbox Code Playgroud)

在我的模板文件(定义public.base)中,我执行以下操作:

<title><spring:message text="" code="${title}" /></title>
Run Code Online (Sandbox Code Playgroud)

现在这适用于静态翻译标题,但我也想支持动态标题,例如显示公司名称.我可以这样做:

<tiles-definitions>    
    <definition name="some-definition" extends="public.base">
        <put-attribute name="title" expression="${company.name}" />
    </definition>
</tiles-definitions>
Run Code Online (Sandbox Code Playgroud)

然后只需在我的模板中输出标题,如下所示:<c:out value="${title}" />.但是,问题在于我的代码中断了,因为title属性的值不再是消息键.我希望能够支持以下场景:

  1. 静态标题,例如"关于我们"
  2. 纯粹的动态标题,例如"$ {company.name}"
  3. 带有翻译内容的动态标题,例如"欢迎来到$ {company.name}"

理想情况下,我可以在我的消息源中使用表达式语言,但我无法使用它.我已经尝试了很多种解决方案,但我似乎找不到合适的解决方案.如果我可以在我的消息源中使用表达式语言,那么这很容易.例如,是否有可能以某种方式执行以下操作?

some-definition.title = Hello there, ${company.name}
Run Code Online (Sandbox Code Playgroud)

在我的模板中:

<spring:message text="" code="some-definition.title" var="test" />
<c:out value="${test}" />
Run Code Online (Sandbox Code Playgroud)

以上不起作用,因为它输出${company.name}而不是变量的实际内容.有没有办法让这样的工作?或者还有其他方法可以支持我上面列出的方案吗?

我考虑创建一个自定义JSTL标记,我将在普通Java代码中解析字符串表达式(已翻译的字符串),但我意识到我可能必须明确指定"变量替换"的根对象才能工作,如此处所述.然后它似乎不是一个动态的解决方案.

有什么方法可以完成这项任务吗?任何帮助深表感谢!

小智 0

瓷砖定义的本地化有帮助吗?参考http://tiles.apache.org/framework/tutorial/advanced/l10n.html

否则我会研究一个 ViewPreparer 来为你扩展 spring 消息。