0

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)

パネルを正しくラップするにはどうすればよいですか?

4

1 に答える 1

2

あなたの最初の例外に関しては、使用attributename="cc.attrs.attributename"はそもそも完全に間違っています。それはそれがどのように機能するかではありません。EL式はのように囲まれているはず#{}ですattributename="#{cc.attrs.attributename}"。それが仕様で義務付けられている方法です。

2番目の例外については、属性の場合でjavax.el.ValueExpressionある式の背後にある実際のオブジェクトタイプではなく、タイプを宣言したためです。それに応じて修正します。java.lang.StringstyleClass

<composite:attribute name="styleClass" required="false"
    type="java.lang.String" />

他のタイプについても同じようにします。適切なタイプの概要については、委任しようとしているのVDLドキュメントを参照すると役立ちます。<rich:panel>

于 2012-12-03T20:50:55.733 に答える