首页 > 代码库 > 转:关于beetl集成struts2 +convention插件无法识别beetl模板的处理方案

转:关于beetl集成struts2 +convention插件无法识别beetl模板的处理方案

转自 jplus 文章

今天第一次接触这个模板引擎,感觉非常不错,平时都是使用spring mvc开发,目前教带学生做一个小项目,使用struts+guice+mybatis,于是想试试这个模板引擎开开实际使用情况。
因为目前项目完全采用零配置方案,就出现了一个问题
根据Beetl使用手册的说明:
需要在struts2配置文件里添加result-types做如下配置
?
<package name="default" namespace="/" extends="struts-default"> .......
<result-types>
<result-type name="beetl" class="org.beetl.ext.struts2.Struts2BeetlActionResult" default="true" />
</result-types>
<action name="HelloWorld" class="example.HelloWorld"> <result>/hello.html</result>
</action> ........ </package>

在常规的基于struts配置文件的开发过程中是完全没有问题的,但是如果一旦与 convention集成将无法完全享受beetl的功能,除非使用注解完成复杂配置。
比较方便的是struts2是开源的,根据对源代码的大致分析主要问题有两点

1.添加convention默认结果视图类型

<constant name="struts.convention.default.parent.package"
    value="http://www.mamicode.com/ssia" />
<constant name="struts.convention.relative.result.types" value="http://www.mamicode.com/dispatcher,velocity,freemarker,beetl"/>
<package name="ssia" namespace="/" extends="convention-default">
    <result-types>
        <result-type name="beetl"
            class="org.beetl.ext.struts2.Struts2BeetlActionResult" default="true" />
    </result-types>
</package>




2.修改convention视图文件扫描扩展名,将我们自己的btl文件也作为convention的视图
<bean type="org.apache.struts2.convention.ConventionsService" name="beetlService" class="com.ssia.web.struts.plugin.convention.beetl.ConventionsBeetlService"/>
<constant name="struts.convention.conventionsService" value="http://www.mamicode.com/beetlService"/>
public class ConventionsBeetlService extends ConventionsServiceImpl {

@Inject
public ConventionsBeetlService(
        @Inject("struts.convention.result.path") String resultPath) {
    super(resultPath);
}
 public Map<String, ResultTypeConfig> getResultTypesByExtension(PackageConfig packageConfig) {
        Map<String, ResultTypeConfig> results = packageConfig.getAllResultTypeConfigs();

        Map<String, ResultTypeConfig> resultsByExtension = super.getResultTypesByExtension(packageConfig);
        resultsByExtension.put("btl", results.get("beetl"));
        return resultsByExtension;
    }
}




经过上述的修改与配置struts2-convention插件与beetl模板引擎将可以融合工作了,spring mvc则不会出现此类情况

转:关于beetl集成struts2 +convention插件无法识别beetl模板的处理方案