JSF2.0复合组件未在MYFaces中呈现

时间:2013-08-29 05:26:49

标签: jsf-2 composite-component websphere-8

我开发了一个示例项目来测试JSF2.0中的复合组件。

这是我的示例代码

我的测试文件

<html xmlns="http://www.w3.org/1999/xhtml"   
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:composite="http://java.sun.com/jsf/composite"
  xmlns:tp="http://java.sun.com/jsf/composite/test"
  >
<h:body>
    <h:form>
    <h:outputLabel value="Success"/>
       <tp:loginComponent 
          usernameLabel="Enter User Name: " 
          usernameValue="#{login.name}" />
    </h:form>
</h:body>  

<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:composite="http://java.sun.com/jsf/composite"
>
    <composite:interface>
        <composite:attribute name="usernameLabel" />
        <composite:attribute name="usernameValue" />
    </composite:interface>
    <composite:implementation>
        <h:form>
            #{cc.attrs.usernameLabel} : 
            <h:inputText id="username" value="#{cc.attrs.usernameValue}" />
        </h:form>
    </composite:implementation>

  

当我在Websphere 8.5上部署它时,复合组件没有被渲染。请帮我识别问题

由于

1 个答案:

答案 0 :(得分:2)

您必须调整文件的位置和名称。否则JSF将无法找到它。

该行

xmlns:tp="http://java.sun.com/jsf/composite/test"

将JSF指向文件夹resources/test(相对于网页的根目录)。假设WebContent是您网页的根目录,则资源文件夹应位于其中。

当JSF看到<tp:loginComponent .... />时,它会在文件夹中查找名为loginComponent.xhtml的文件。

修改

因为资源文件夹中可以有多种资源,所以最好为组件创建子文件夹。我通常称之为comps。所以这会给你路径 /WebContent/resources/comps在此文件夹中放置一个名为loginComponent.xhtml的文件与您的组件。

将命名空间行更改为:xmlns:tp="http://java.sun.com/jsf/composite/comps"(该资源中的comps隐含但未在URL中指定。)

另请参阅java ee tutorial