1

我开发了一个示例项目来测试 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 上部署它时,复合组件未呈现。请帮助我确定问题

谢谢

4

1 回答 1

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

于 2013-08-29T05:56:04.960 回答