在Tomahawk成功部署后,出于對(duì)界面的優(yōu)化和增加一些功能亮點(diǎn)的需要,我開始考慮使用一些sandbox中的控件,本來按理說一切都應(yīng)該很順利的,畢竟在此之前大部分問題都已經(jīng)按部就班地做過了一遍,所有要改動(dòng)的東西、以及哪些部分是做什么用的都已經(jīng)清楚了,但結(jié)果還是出乎我的意料。
先說說這個(gè)意外的結(jié)果吧,含sandbox 組件的頁(yè)面能夠顯示但沒有相應(yīng)的效果,sandbox的組件看起來好像被忽略了,查看html源碼可知很多sandbox標(biāo)簽沒有被正確解析,另外沒有任何錯(cuò)誤或警告信息,無論在頁(yè)面還是在log中都沒有發(fā)現(xiàn)任何有用線索,額外加用facestrace也沒找到什么錯(cuò)誤。
配置步驟如下:
1. 下載tomahawk-sandbox包,我先后試過兩個(gè)版本:1.1.5 和 1.1.6-snapshot
2. 下載了facelets主站上的sandbox taglib文件,并且根據(jù)sandbox源碼仔細(xì)核對(duì)修改過,確信沒有了錯(cuò)誤。
3. 修改web.xml,在context-param 中為facelets.LIBRARIES,增加了相應(yīng)的taglib.xml,最終信息像下面這樣
<context-param>
<param-name>facelets.LIBRARIES</param-name>
<param-value>/WEB-INF/tomahawk.taglib.xml;/WEB-INF/sandbox.taglib.xml;/WEB-INF/jsf-comp-chart.taglib.xml;/WEB-INF/facestrace.taglib.xml</param-value>
</context-param>
以上配置中,除了sandbox,其他一切正常,另外還用了Ajax4JSF,但不管是否去掉它,對(duì)結(jié)果都沒有影響,已試驗(yàn)過,不必再考慮這個(gè)因素。
4. 在測(cè)試頁(yè)面中增加了namespace支持,加了點(diǎn)代碼用到sandbox, 片斷如下:
<t:document
xmlns:t="http://myfaces.apache.org/tomahawk"
xmlns:s="http://myfaces.apache.org/sandbox"
..>
<!-- effect by dojo -->
<s:effect id="effect1" fade="true">
<h:outputText value="Hello We hope you enjoy Apache MyFaces and the effects by DOJO and script.aculo.us" />
</s:effect>
<!-- input focus -->
<h:panelGrid columns="2">
<h:outputLabel for="input1" value="Input1: "/>
<h:inputText id="input1"/>
<h:outputLabel for="input2" value="Input2: "/>
<h:inputText id="input2"/>
<s:focus id="focus" for="input2" />
</h:panelGrid>
<!-- input suggest -->
<s:inputSuggest value="#{user.state.key}" required="true">
<f:selectItems value="#{choices}"/>
</s:inputSuggest>
5.并且在加入sandbox后,把以前的tomahawk-facelets.jar也從/WEB-INF/lib目錄下刪除試過,不刪除時(shí)有沖突提示,但就sandbox控件的顯示而言,結(jié)果是一樣的,“沒有!”
有誰(shuí)能有比較好的解決方案,還是我漏掉了什么重要的步驟,請(qǐng)不吝指教,非常感謝!
另,希望上述這些配置方法對(duì)需要進(jìn)行tomahawk,facestrace, jsf-comp在facelets中配置的人有些幫助!
問題找到了,因?yàn)閟andbox.taglib.xml中有錯(cuò)誤,導(dǎo)致faceletViewHandler.initializeCompiler失敗,從而使用
xmlns:s="http://myfaces.apache.org/sandbox能被識(shí)別,但里面的TagLibConfig卻沒有正確的內(nèi)容,這樣facelet只好把部分標(biāo)簽忽略了。