我开发了一个示例项目来测试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上部署它时,复合组件没有被渲染。请帮我识别问题
由于
答案 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。