轉自 jplus 文章 html
今天第一次接觸這個模板引擎,感受很是不錯,平時都是使用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默認結果視圖類型
java
<constant name="struts.convention.default.parent.package" value="ssia" /> <constant name="struts.convention.relative.result.types" value="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>
<bean type="org.apache.struts2.convention.ConventionsService" name="beetlService" class="com.ssia.web.struts.plugin.convention.beetl.ConventionsBeetlService"/> <constant name="struts.convention.conventionsService" value="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; } }