tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
1297
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Wutklumpen Wutklumpen ist offline Mitglied Bronze
    Registriert seit
    Aug 2009
    Beiträge
    28
    Heyho!

    Seit gestern versuche ich mich nun daran, eigene Komponenten für jsf 1.2 zu entwerfen. Es gibt zwar wieder ein paar Tutorials, aber die sind meißt einfach nicht detailiert genug!

    Beim Seitenaufruf mit der eigenenen Komponente beomm ich dann folgende Fehlermeldung:

    org.apache.jasper.JasperException - Unable to load tag handler class "wut.klumpen.outputCrapUITag" for tag "wut:outputCrap"


    Die Componentclass outputCrapUIC.java:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    
    package wut.klumpen.components;
     
    import java.io.IOException;
     
    import javax.faces.component.UIComponentBase;
    import javax.faces.context.FacesContext;
    import javax.faces.context.ResponseWriter;
     
    public class outputCrapUIC extends UIComponentBase
    {
        
        public void encodeBegin(FacesContext fc) throws IOException
        {
            ResponseWriter writer = fc.getResponseWriter();
            String msg = (String) getAttributes().get("msg");
            
            writer.startElement("h3", this);
                if(msg != null)
                    writer.writeText(msg, "msg");
                else
                    writer.writeText("Hmm, dein msg war wohl null! Schade eigentlich!", null);
            writer.endElement("h3");
            
            writer.startElement("p", this);
                writer.writeText("Dieser Text wird aus einer customcomponent generiert!", null);
            writer.endElement("p"); 
        }   
     
        @Override
        public String getFamily()
        {
            return "wut.klumpen.components.outputCrapUIC";
        }
     
    }


    Die Tag-class ouputCrapUITag:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    
    package wut.klumpen.components;
     
    import javax.faces.component.UIComponent;
    import javax.faces.webapp.UIComponentELTag;
     
    public class outputCrapUITag extends UIComponentELTag
    {
        public String msg = null;
     
        @Override
        public String getComponentType(){return "wut.klumpen.components.outputCrap";}
        
        @Override
        public String getRendererType(){return null;}
        
        
        @SuppressWarnings("unchecked")
        protected void setProperties(UIComponent comp)
        {
            super.setProperties(comp);
            comp.getAttributes().put("msg", msg);
        }
        
        public void release()
        {
            super.release();
            this.msg  = null;
        }
     
        public void setMsg(String msg)
        {
            this.msg = msg;
        }
    }

    Die .TLD:

    Code xml:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    
    <?xml version="1.0" encoding="UTF-8"?>
     
    <taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
        version="2.1">
        <description>Meine Custom Components</description>
        <tlib-version>1.0</tlib-version>
        <short-name>wut</short-name>
        <uri>http://wutklump.en/custom</uri>
        <tag>
            <name>outputCrap</name>
            <tag-class>wut.klumpen.outputCrapUITag</tag-class>
            <body-content>empty</body-content>
            
            <attribute>
                <name>binding</name>
            </attribute>
            
            <attribute>
                <name>id</name>
            </attribute>
            
            <attribute>
                <name>rendered</name>
            </attribute>
            
            <attribute>
                <name>msg</name>
            </attribute>
        </tag>  
    </taglib>

    und in der Faces-Config wirds so gemappt:

    Code :
    1
    2
    3
    4
    
    <component>
            <component-type>wut.klumpen.components.outputCrap</component-type>
            <component-class>wut.klumpen.components.outputCrapUIC</component-class>
        </component>

    und wenn ich nun
    <wut:outputCrap msg="Hell World!"/>
    in meiner jsp schreibe bekomm ich diese Fehlermeldung:

    org.apache.jasper.JasperException - Unable to load tag handler class "wut.klumpen.outputCrapUITag" for tag "wut:outputCrap"


    Jmd ne Idee?


    €: die .tld und die beiden outputCrap-classes liegen im web-inf/classes/wut/klumpen/components
    Geändert von Wutklumpen (06.10.09 um 16:08 Uhr) Grund: weil
     

  2. #2
    Wutklumpen Wutklumpen ist offline Mitglied Bronze
    Registriert seit
    Aug 2009
    Beiträge
    28
    Hmm..., noch niemand eigene Komponenten entwickelt? Ich denk das is die große Stärke von JSF!?

    So wie ich das bis jetzt mitbekommen habe, sind die benötigten Dateien ja alle von einander Abhängig:

    Tag-Handler:
    Im Tag-Handler muss die getComponentType()-Methode den exakten Pfad zur Komponenten-Klasse inklusive Packages zurückgeben, in meinem Fall sollte das hiermit getan sein:
    Code :
    1
    
    return "wut.klumpen.components.outputCrapUIC";

    Das selbe gilt für die getRenderType()-Methode, falls man einen Renderer benötigt!(oder brauch man in jedem Fall einen Renderer?Kein default?)

    Die Attribute im Tag-Handler brauchen getter u. setter, auch erledigt.
    -------------------

    Taglib Descriptor .TLD:
    Hier gibts noch so paar kleine ungereimtheiten, zB dachte ich, das die Url im uri-tag den String angibt, mit dem man die ...ich nenns mal Komponenten-Bibliothek... über <% taglib uri="%%%URI%%%" refix="bla"> in die .jsp einbindet! Ich muss hingegen den absoluten pfad der .tld benutzen!

    Egal.., wichtiger scheint auf jeden Fall das tag-Tag.o0O(ein tag-Tag, na ganz prima...):
    Code :
    1
    2
    3
    4
    5
    
    <tag>
            <name>outputCrap</name>
            <tag-class>wut.klumpen.outputCrapUITag</tag-class>
                    /*snip*/
    </tag>

    <name> steht m.E. für den letztendlichen Komponentennamen, also <prefix:name>
    <tag-class> muss den Pfad zur Tag-Handler-Klasse inklusive Packages beinhalten!
    ------------------
    faces-config.xml:

    Code :
    1
    2
    3
    4
    
    <component>
            <component-type>wut.klumpen.components.outputCrap</component-type>
            <component-class>wut.klumpen.components.outputCrapUIC</component-class>
    </component>
    <component-type>: ich hab nich den blassesten schimmer! Ich versuch mich ja an zB der Tomahawk.jar zu orientieren, aber das hilft auch nich weiter.
    <component-class>: Pfad inklusive packages zur Komponentenklasse
    ----------------
    Und zuletzt noch die Komponentenklasse:

    was in die getFamily-Methode rein muss/soll/kann, bin ich mir auch nich sicher!
    ----------------

    Kann mir irgendjemand diese Aussagen bestätigen oder eben berichtigen? Das wär wirklich super!

    Danke!
     

  3. #3
    Wutklumpen Wutklumpen ist offline Mitglied Bronze
    Registriert seit
    Aug 2009
    Beiträge
    28
    Und wenn man der Fehlermeldung auch nur mal ein Deut Aufmerksamkeit zukommen lassen würde, hätte man ganz schnell gemerkt, das in der TLD beim tag-class ein Stück Pfad fehlt -.-

    Denn es müsste in meinem Fall wut.klumpen.components.outputCrapUITag heißen!
    AHRG! *in Tisch beiß*
     

Ähnliche Themen

  1. Antworten: 7
    Letzter Beitrag: 29.06.10, 15:10
  2. [JSF 1.2] Custom Components
    Von Firestorm696 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 0
    Letzter Beitrag: 06.05.10, 09:02
  3. Validation: Unable to load a schema with target namespace
    Von lolilol im Forum XML Technologien
    Antworten: 0
    Letzter Beitrag: 18.08.08, 21:14
  4. AXIS2 und AOP Fehler:Unable to load Bytecode..
    Von navino im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 2
    Letzter Beitrag: 17.03.08, 07:48
  5. mysql und iis - Unable to load dynamic library
    Von Briefkasten im Forum PHP
    Antworten: 3
    Letzter Beitrag: 25.08.06, 08:08