我试着写资源/ 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到类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)
我该如何正确包装面板?
答案 0 :(得分:2)
关于您的第一个例外,使用attributename="cc.attrs.attributename"
首先完全错误。这不是它的工作原理。 EL表达式应该包含在#{}
中attributename="#{cc.attrs.attributename}"
中。这就是规范要求它。
关于你的第二个异常,那是因为你声明了类型是javax.el.ValueExpression
而不是表达式背后的实际对象类型,如果java.lang.String
属性是styleClass
。相应地修复它:
<composite:attribute name="styleClass" required="false"
type="java.lang.String" />
对其他类型做同样的事情。有关正确类型的概述,请咨询您尝试委托的<rich:panel>
the VDL documentation。