【问题标题】:Facelets custom tag not renderingFacelets 自定义标签未呈现
【发布时间】:2011-03-08 07:03:04
【问题描述】:

我正在尝试使用 Facelets 创建一个自定义标签,但它没有呈现(即标签在响应中显示为未替换)。

标签(/WEB-INF/facelets/tags/inputThumbnailSelector.xhtml):

<html xmlns="http://www.w3.org/1999/xhtml"
   xmlns:f="http://java.sun.com/jsf/core"
   xmlns:h="http://java.sun.com/jsf/html"
   xmlns:ui="http://java.sun.com/jsf/facelets"
   xmlns:t="http://myfaces.apache.org/tomahawk">

<ui:composition>
 <div style="position: relative;">
  <img style="position: absolute; left: 0; top: 0;" src="#{image}"/>
  <div class="thumbnail-selector" style="position: absolute; left: #{backingBean.thumbnailLeft}; top: #{backingBean.thumbnailTop};"/>
 </div>
</ui:composition>

</html>

/WEB-INF/facelets/tags/panayk.taglib.xml:

<!DOCTYPE facelet-taglib PUBLIC "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN" "http://java.sun.com/dtd/facelet-taglib_1_0.dtd">

<facelet-taglib>
 <namespace>http://panayk.endofinternet.org/jsf</namespace>
 <tag>
  <tag-name>inputThumbnailSelector</tag-name>
  <source>inputThumbnailSelector.xhtml</source>
 </tag>
</facelet-taglib>

我的 web.xml 包含:

<context-param>
 <param-name>javax.faces.FACELETS_LIBRARIES</param-name>
 <param-value>/WEB-INF/facelets/tags/panayk.taglib.xml</param-value>
</context-param>

这就是标签的调用方式:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
   xmlns:f="http://java.sun.com/jsf/core"
   xmlns:h="http://java.sun.com/jsf/html"
   xmlns:ui="http://java.sun.com/jsf/facelets"
   xmlns:t="http://myfaces.apache.org/tomahawk"
   xmlns:my="http://panayk.endofinternet.org/jsf">

<ui:composition template="/layout/layout.xhtml">
...  
   <my:inputThumbnailSelector image="${facesContext.externalContext.requestContextPath}/image/get.servlet?id=1" 
            backingBean="#{entryHandler}"/>
...
</ui:composition>

</html>

非常感谢!

【问题讨论】:

  • 有人吗?这仍然不起作用。

标签: jsf facelets


【解决方案1】:

我在这里找到了答案:https://community.oracle.com/thread/1719525

我想我找到了问题和解决方案(这不是 100% 正确的)。 上下文参数应该是facelets.LIBRARIES 而不是javax.faces.FACELETS_LIBRARIES

上下文参数javax.faces.FACELETS_LIBRARIES 应该替换已弃用(根据JSF 规范已弃用)的上下文参数facelets.LIBRARIES。当使用后者时,服务器启动期间的日志中会显示一条警告,指出 facelets.LIBRARIES 已弃用,应改用 javax.faces.FACELETS_LIBRARIES。但我认为这仅用于记录警告,即名称facelets.LIBRARIES 仍用于构建自定义标记库组件。我是说这不是 100% 正确的,因为它应该与新的参数名称一起使用。还有其他参数有了新名称,但我还没有测试它们。

【讨论】:

  • @Panyiotis Karabassis:谢谢,这拯救了我的一天。我的问题是使用 facelet 而不是 facelets
  • 不客气!那么这仍然是一个问题吗?我已经有一段时间没有编写 JSF 了,但我刚刚购买了关于 JSF2.0 的“Core JavaServer Faces”一书(非常有前途),其中 facelets 作为默认视图层。现在不应该“开箱即用”吗?
  • 在“Core Javaserver Faces”中,作者同时使用了 javax.faces.FACELETS_LIBRARIES 和 acelets.LIBRARIES,这确实令人困惑
【解决方案2】:

我建议你这样做:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
   xmlns:f="http://java.sun.com/jsf/core"
   xmlns:h="http://java.sun.com/jsf/html"
   xmlns:ui="http://java.sun.com/jsf/facelets"
   xmlns:t="http://myfaces.apache.org/tomahawk">

 <div style="position: relative;">
  <img style="position: absolute; left: 0; top: 0;" src="#{image}"/>
  <div class="thumbnail-selector" style="position: absolute; left: #{backingBean.thumbnailLeft}; top: #{backingBean.thumbnailTop};"/>
 </div>
</ui:composition>

但一切似乎都很好,因为您使用了布局,您是否像这样将自定义标签包装在 ui:define 中?

<ui:define name="body">
<my:inputThumbnailSelector image="${facesContext.externalContext.requestContextPath}/image/get.servlet?id=1" 
            backingBean="#{entryHandler}"/>
</ui:define>

【讨论】:

  • 是的,我将它包装在 ui:define 中。谢谢!
【解决方案3】:

确保您的 *.taglib.xml 配置良好。碰巧我有错误的命名空间,但它不起作用。 当我改变它的工作时,我立即自动完成(也就是代码完成)

<facelet-taglib version="2.2"
            xmlns="http://xmlns.jcp.org/xml/ns/javaee"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facelettaglibrary_2_2.xsd">
</facelet-taglib>

相关链接:

JSF 2.2: New namespaces

Packaging Facelets files (templates, includes, composites) in a JAR

【讨论】:

    猜你喜欢
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 2012-02-10
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多