我尝试在resources/ui/div.xhtml中写:
<?xml version="1.0" encoding="utf-8"?>
<ui:component xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<composite:interface>
<composite:attribute name="binding" required="false"
type="javax.el.ValueExpression" />
<composite:attribute name="bodyClass" required="false"
type="javax.el.ValueExpression" />
<composite:attribute name="header" required="false"
type="javax.el.ValueExpression" />
<composite:attribute name="headerClass" required="false"
type="javax.el.ValueExpression" />
<composite:attribute name="id" required="false" type="java.lang.String" />
<composite:attribute name="ondblclick" required="false"
type="javax.el.ValueExpression" />
<composite:attribute name="onkeydown" required="false"
type="javax.el.ValueExpression" />
<composite:attribute name="onkeypress" required="false"
type="javax.el.ValueExpression" />
<composite:attribute name="onkeyup" required="false"
type="javax.el.ValueExpression" />
<composite:attribute name="onmousedown" required="false"
type="javax.el.ValueExpression" />
<composite:attribute name="onmousemove" required="false"
type="javax.el.ValueExpression" />
<composite:attribute name="onmouseout" required="false"
type="javax.el.ValueExpression" />
<composite:attribute name="onmouseover" required="false"
type="javax.el.ValueExpression" />
<composite:attribute name="onmouseup" required="false"
type="javax.el.ValueExpression" />
<composite:attribute name="rendered" required="false"
type="javax.el.ValueExpression" />
<composite:attribute name="style" required="false"
type="javax.el.ValueExpression" />
<composite:attribute name="styleClass" required="false"
type="javax.el.ValueExpression" />
<composite:attribute name="onclick" required="false"
type="javax.el.ValueExpression" />
<composite:attribute name="title" required="false"
type="javax.el.ValueExpression" />
</composite:interface>
<composite:implementation>
<rich:panel
binding="cc.attrs.binding"
bodyClass="cc.attrs.bodyClass" header="cc.attrs.header"
headerClass="cc.attrs.headerClass" id="cc.attrs.id"
ondblclick="cc.attrs.ondblclick" onkeydown="cc.attrs.onkeydown"
onkeypress="cc.attrs.onkeypress" onkeyup="cc.attrs.onkeyup"
onmousedown="cc.attrs.onmousedown"
onmousemove="cc.attrs.onmousemove"
onmouseout="cc.attrs.onmouseout"
onmouseover="cc.attrs.onmouseover"
onmouseup="cc.attrs.onmouseup" rendered="cc.attrs.rendered"
style="cc.attrs.style" styleClass="cc.attrs.styleClass"
onclick="cc.attrs.onclick"
title="cc.attrs.title">
<composite:insertChildren />
</rich:panel>
</composite:implementation>
</ui:component>
并从这里调用它:
<html
...
xmlns:u="http://java.sun.com/jsf/composite/ui">
...
<u:div styleClass="dualbrand">
test
</u:div>
...
</html>
但我收到错误:
javax.servlet.ServletException:java.lang.String 无法转换为 javax.faces.component.UIComponent javax.faces.webapp.FacesServlet.service(FacesServlet.java:606) org.jboss.weld.servlet.ConversationPropagationFilter.doFilter( ConversationPropagationFilter.java:62) com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:118) org.jboss.solder.servlet.exception.CatchExceptionFilter.doFilter(CatchExceptionFilter.java:65) org.jboss.solder.servlet。 event.ServletEventBridgeFilter.doFilter(ServletEventBridgeFilter.java:74)
如果我将实现更改为:
<composite:implementation>
<rich:panel
binding="#{cc.attrs.binding}"
bodyClass="#{cc.attrs.bodyClass}" header="#{cc.attrs.header}"
headerClass="#{cc.attrs.headerClass}" id="#{cc.attrs.id}"
ondblclick="#{cc.attrs.ondblclick}" onkeydown="#{cc.attrs.onkeydown}"
onkeypress="#{cc.attrs.onkeypress}" onkeyup="#{cc.attrs.onkeyup}"
onmousedown="#{cc.attrs.onmousedown}"
onmousemove="#{cc.attrs.onmousemove}"
onmouseout="#{cc.attrs.onmouseout}"
onmouseover="#{cc.attrs.onmouseover}"
onmouseup="#{cc.attrs.onmouseup}" rendered="#{cc.attrs.rendered}"
style="#{cc.attrs.style}" styleClass="#{cc.attrs.styleClass}"
onclick="#{cc.attrs.onclick}"
title="#{cc.attrs.title}">
<composite:insertChildren />
</rich:panel>
</composite:implementation>
我会得到:
javax.servlet.ServletException: /WEB-INF/templates/main.xhtml @34,33 styleClass="dualbrand" 无法将类 java.lang.String 类型的 dualbrand 转换为类 javax.el.ValueExpression javax.faces.webapp.FacesServlet .service(FacesServlet.java:606) org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62) com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:118) org.jboss.solder.servlet .exception.CatchExceptionFilter.doFilter(CatchExceptionFilter.java:65) org.jboss.solder.servlet.event.ServletEventBridgeFilter.doFilter(ServletEventBridgeFilter.java:74)
我应该怎么做才能正确包裹面板?