Rythm:根据请求在现有引擎实例上创建新引擎或设置语言/区域设置

时间:2016-06-01 17:55:15

标签: java template-engine rythm

Rythm可以用作单例或实例化为普通对象。 目前,我在Servlet Init()方法的webapp中实例化一次。 (这与使用单身几乎相同,因为我只创建了一次)

现在我需要为我的网站添加i18n支持,并且需要在呈现之前动态设置语言。

我可以这样做:

engine.setLocale(userLocale);
engine.render(template,arguments);

我假设如果我使用单例(或在servlet中创建的单个实例),那么我可能会在两个语句之间产生竞争条件。

  1. 这是正确的还是没有竞争条件?
  2. 我应该为每个请求创建一个Rythm实例吗?
  3. 是否有其他方法可以在不更改引擎状态的情况下更改每个渲染的语言?

1 个答案:

答案 0 :(得分:2)

在最新版本的节奏中,您应该致电engine.prepare(Locale),而不是engine.setLocale(Locale);

现在回答你的问题:

  
      
  1. 这是正确的还是没有竞争条件?
  2.   

它不会导致竞争条件,因为在代码中使用ThreadLocal来存储渲染设置

  
      
  1. 我应该为每个请求创建一个Rythm实例吗?
  2.   

绝对

  
      
  1. 是否有其他方法可以在不更改引擎状态的情况下更改每个渲染的语言?
  2.   

语言和区域设置是 NOT 引擎级别状态,它们每个请求状态。但是,可以在引擎级别配置默认语言和区域设置