在Tomahawk成功部署后,出于对界面的优化和增加一些功能亮点的需要,我开始考虑使用一些sandbox中的控件,本来按理说一切都应该很顺利的,毕竟在此之前大部分问题都已经按部就班地做过了一遍,所有要改动的东西、以及哪些部分是做什么用的都已经清楚了,但结果还是出乎我的意料。
先说说这个意外的结果吧,含sandbox 组件的页面能够显示但没有相应的效果,sandbox的组件看起来好像被忽略了,查看html源码可知很多sandbox标签没有被正确解析,另外没有任何错误或警告信息,无论在页面还是在log中都没有发现任何有用线索,额外加用facestrace也没找到什么错误。
配置步骤如下:
1. 下载tomahawk-sandbox包,我先后试过两个版本:1.1.5 和 1.1.6-snapshot
2. 下载了facelets主站上的sandbox taglib文件,并且根据sandbox源码仔细核对修改过,确信没有了错误。
3. 修改web.xml,在context-param 中为facelets.LIBRARIES,增加了相应的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,但不管是否去掉它,对结果都没有影响,已试验过,不必再考虑这个因素。
4. 在测试页面中增加了namespace支持,加了点代码用到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目录下删除试过,不删除时有冲突提示,但就sandbox控件的显示而言,结果是一样的,“没有!”
有谁能有比较好的解决方案,还是我漏掉了什么重要的步骤,请不吝指教,非常感谢!
另,希望上述这些配置方法对需要进行tomahawk,facestrace, jsf-comp在facelets中配置的人有些帮助!
问题找到了,因为sandbox.taglib.xml中有错误,导致faceletViewHandler.initializeCompiler失败,从而使用
xmlns:s
="http://myfaces.apache.org/sandbox能被识别,但里面的TagLibConfig却没有正确的内容,这样facelet只好把部分标签忽略了。