FTL可以修改请求对象设置属性吗?

时间:2012-11-17 09:09:20

标签: servlet-filters freemarker

我知道FTL纯粹是一个渲染引擎,这应该在控制器中完成 在我的场景中,我需要提供相同数据的多个表示。

我可以轻松编写呈现XML的FTL,然后在自定义过滤器需要时转换为JSON。但是我们有大量的FTL要做。数据模型将是通用的。虽然XML方法是一个我不想在相同的XML元素上重复的选项,(编写handcrafter xml元素的不同团队成员是错误的处方,我们需要确保标记是相同的,等等)< / p>

但是我想知道我是否可以在我的FTL中填充一个对象

//假设一个FreMarkerResolver已将我的输出元模型作为模型的一部分公开 someObject.addRecords(记录)

//这里有一些逻辑 了request.setAttribute( “数据”,someObject);

那么我的Servlet过滤器只会将数据对象转换为JSON,xml,YAML或我想要的任何内容。

我曾在某处读过,例如会话无法从FTL修改,但请求呢?我们至少可以设置一个新属性吗?

由于

1 个答案:

答案 0 :(得分:0)

FreeMarker本身对Servlets或HTTP一无所知。即使您可以只读取请求或会话对象,这已经是更高级别的Web应用程序框架所做的。这完全取决于Web应用程序框架,如何,以及如何从模板中看到这些对象,因此如果有方法可以修改它们,则由它决定。现在我假设你的情况不存在。

您可以创建一个TemplateDirectiveModel来封装Request并根据需要执行操作,然后将其放入数据模型中,例如名称为storeInRequest,这样您就可以在模板中执行<@storeInRequest data=someObject />之类的操作。或者你可以找出其他更好地表达你想要的应用程序的东西。关键是,由于TemplateDirectiveModel是用Java实现的,因此您可以在其中执行任何操作。 (同样,你可以用TemplateMethodModelEx实现类似函数的东西,但是如果你需要副作用而不是返回值,那么TemplateDirectiveModel就更好了。而且它已经命名了参数...)