sparta-紫杉 2010-6-3 8:05
在項目中使用到Struts2的dojo時,出現java.io.FileNotFoundException: Template /template/ajax/head.ftl not found. 有時出現.../text.ftl not found. 錯誤。
分析一下:
從strtus2.1.x開始,Struts2團隊將dojo從核心包里面提取出來,成為一個struts2的插件struts2-dojo-plugin-*.jar,因此在jsp頁面上,若要使用dojo的話,必須引入如下標簽庫:<%@taglib prefix="ss" uri="/struts-dojo-tags"%/>。當然,若要使用Struts2的標簽庫,還需引入<%@taglib prefix="s" uri="/struts-tags"%/>標簽庫。
另外,Struts2的標簽(無論是dojo或非dojo)均需要freeMarker模板文件*.ftl進行渲染和解釋以生成Html頁面,dojo或非dojo的標簽庫均配備一套自己的模板文件庫,在jsp頁面里,struts2根據各標簽的theme來查找自己配置的相應模板文件*.ftl,若theme設置不對,則struts2就會從相應路徑中找不到需要的ftl文件,就會報錯../*.ftl not found.
當在jsp頁面內,標簽的主題(theme)若設置不正確,則會找不到相應的ftl文件。 比如下面代碼:
<s:form method="post" validate="true" theme="xhtml">
<s:textfield label="Name" name="name" />
<s:password label="Password" name="password" />
<s:textfield label="Age" name="age" />
<ss:submit />
</s:form>
上述的theme定為xhtml,若是修改為theme="ajax",則在運行時jsp頁面將不會被解析,提示.../text.ftl not found。 這是因為在struts2的核心包中沒有template/ajax/text.ftl文件。
jsp文件中使用的標簽是dojo的,就會根據theme的設置到與dojo配置的模板文件中去找,使用的標簽為struts2的,就到與struts2配套的模板文件中去找。這樣才能找得到自己需要的模板文件進行渲染。呵呵,經歷了痛苦的探索之后,終于明白了個中原理。
-東營 sparta-紫杉 原創,轉載請注明出處 :)
http://m.tkk7.com/SpartaYew/
SpartaYew@163.com
QQ:22086526