扩展Struts2的FreemarkerResult,动态获取模板文件
2013-10-13 14:33
429 查看
最近开发一个基于组件的开发平台,其中遇到一个问题就是:要在程序运行时根据某个配置,动态地去加载Freemarker模板,经过查阅相关资料和查看Struts的FreemarkerResult源码解决了这个问题,步骤大约是:
1、新定义个类,比如叫做ExampleFreemarkerResult,并且extends基类org.apache.struts2.views.freemarker.FreemarkerResult,覆写FreemarkerResult的方法:
public void doExecute(String locationArg, ActionInvocation invocation);
注意,其中参数locationArg就是当前Struts2默认要加载的ftl模板文件的全路径,invocation是Action的调用环境,获取该环境,基本上就可以获取和Action相关的很多信息;
2、定义了这个类,那么如何让Struts2在执行完Action的逻辑后进入该Result呢?自然,我们都会想到配置到struts.xml中去,其配置如下:
<package name="struts-example" extends="struts-default">
<result-types>
<result-type name="exampleFreemarker" class="com.gsafety.cloudframework.core.environment.module.page.CloudModuleFreemarkerResult"/>
</result-types>
</package>
3、要使用该Result的Action的package都需要继承struts-example这个package,例如:
<package name="attachment" namespace="/attachment" extends="struts-example">
<action name="attachment" class="com.example.action.AttachmentAction">
<result name="main" type="exampleFreemarker">/page/fileupload.ftl</result>
</action>
</package>
好了,至此扩展就完成了,另外注意:
第一步里自定义FreemarkerResult可以实现Result的接口,而没有必要非要继承这个超类,这个大家可以查阅Struts2的FreemarkerResult源码,自然会清楚。
也可以自定 义Freemarker的Freemarker的模板加载器来,然后调用FreemarkerResult中的configuration的setTemplateLoader方法完成注册,也可以完成这样的工作,这个大家可以自己去找资料研究下。
1、新定义个类,比如叫做ExampleFreemarkerResult,并且extends基类org.apache.struts2.views.freemarker.FreemarkerResult,覆写FreemarkerResult的方法:
public void doExecute(String locationArg, ActionInvocation invocation);
注意,其中参数locationArg就是当前Struts2默认要加载的ftl模板文件的全路径,invocation是Action的调用环境,获取该环境,基本上就可以获取和Action相关的很多信息;
2、定义了这个类,那么如何让Struts2在执行完Action的逻辑后进入该Result呢?自然,我们都会想到配置到struts.xml中去,其配置如下:
<package name="struts-example" extends="struts-default">
<result-types>
<result-type name="exampleFreemarker" class="com.gsafety.cloudframework.core.environment.module.page.CloudModuleFreemarkerResult"/>
</result-types>
</package>
3、要使用该Result的Action的package都需要继承struts-example这个package,例如:
<package name="attachment" namespace="/attachment" extends="struts-example">
<action name="attachment" class="com.example.action.AttachmentAction">
<result name="main" type="exampleFreemarker">/page/fileupload.ftl</result>
</action>
</package>
好了,至此扩展就完成了,另外注意:
第一步里自定义FreemarkerResult可以实现Result的接口,而没有必要非要继承这个超类,这个大家可以查阅Struts2的FreemarkerResult源码,自然会清楚。
也可以自定 义Freemarker的Freemarker的模板加载器来,然后调用FreemarkerResult中的configuration的setTemplateLoader方法完成注册,也可以完成这样的工作,这个大家可以自己去找资料研究下。
相关文章推荐
- struts2获取文件及获得扩展名
- Struts2 FreeMarker FTL 模板文件中调用静态 java 方法
- 动态获取文件的关联扩展名
- Struts2的动态result
- JQuery模板插件jquery.tmpl-动态ajax扩展
- FreeMarker的模板文件语法
- 关于MyEclipse对Struts2配置文件较检异常 Invalid result location value/parameter
- PHP中获取文件扩展名
- struts2获取文件类型,文件后缀名
- iwpriv工具通过ioctl动态获取相应无线网卡驱动的private_args所有扩展参数
- [lua]lua获取文件名字,去除扩展名
- 如何在magento模板文件中获取controller名称,action名称和module name
- PHP 获取文件的扩展名的6种方法
- struts2之Action配置的各项默认值、result配置的各种试图转发类型及为应用指定多个struts配置文件
- 动态创建服务器控件,获取HTML输出(用于生成静态文件,简化页面,简化编程等)
- 动态获取织梦CMS最新更新 利于收录的SiteMap.php文件
- [struts2.x] 通过Map从前端传递动态扩展的属性
- java动态获取src目录下的文件路径
- 【FreeMarker】【模板文件FTL】模板插值 ${...}
- DropDownList从XML配置文件动态获取下拉列表值