代码之家  ›  专栏  ›  技术社区  ›  Panayiotis Karabassis

facelets自定义标记未呈现

  •  4
  • Panayiotis Karabassis  · 技术社区  · 16 年前

    我正在尝试用facelets创建一个自定义标记,但它没有呈现(即,标记在响应中显示为未放置)。

    标签(/WEB-INF/facelets/tags/inputHumbnailSelector.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>
    

    my 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>
    

    非常感谢!

    3 回复  |  直到 8 年前
        1
  •  7
  •   Tarik mtuygun    11 年前

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

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

    上下文参数 javax.faces.facelets_库 应替换已弃用的(根据JSF规范弃用)上下文参数 facelets.库 . 当使用后者时,在服务器启动期间日志中会显示一条警告,说明 facelets.库 已弃用,并且 javax.faces.facelets_库 应该改为使用。但我认为这只用于记录警告,即仍然是名称 facelets.库

        2
  •  0
  •   Ha11owed    16 年前

    我建议您这样做:

    <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>
    

    but everything seems ok, since you use a layout, did you wrap the custom tag in a ui:define like this ?

    <ui:define name="body">
    <my:inputThumbnailSelector image="${facesContext.externalContext.requestContextPath}/image/get.servlet?id=1" 
                backingBean="#{entryHandler}"/>
    </ui:define>
    
        3
  •  0
  •   Dorin Brage    8 年前

    确保您的*.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

    推荐文章