在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只好把部分标签忽略了

Feedback

# re: 求教: 如何在Facelets中使用Tomhawk sandbox?  回复  更多评论   

2007-06-04 11:23 by 小李飞刀
在 facelets.dev.java.net(https://facelets.dev.java.net/nonav/docs/dev/docbook.html#taglib-use-normal)上有这么一段话

If there is a tag in your document under a namespace (such as XHTML) that isn't specified in a Tag Library, then Facelets will treat that tag as a simple text fragment and optimize it for tree creation. If the namespace is known, but the element's name isn't included in the tag library, then an exception will be thrown which will tell you what file and line caused the problem.

If your tag or component isn't showing up in your rendered page, check the source of page and see if the tag was simply ignored. This usually means you are using the wrong namespace for your library.

从症状上来看,的确是把sandbox的tag当作了simple text直接输出到了页面,但我就是没弄明白为什么会这样,仔细检查了namespace 和library,好像也没发现什么错误。

只有注册用户登录后才能发表评论。


网站导航:
 

posts - 44, comments - 43, trackbacks - 0, articles - 5

Copyright © 小李飞刀

涉足江湖,广交朋友
寻找有共同兴趣爱好者一起开创掌上移动应用!


欢迎光临!您是第 hit counter 位访客。