tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
0
ZUGRIFFE
1259
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    larlib larlib ist offline Rookie
    Registriert seit
    May 2007
    Beiträge
    7
    Hallo,
    ich versuche gerade eine eigene JSF-Komponente zu bauen und diese mit einem ActionListener auszustatten. Die Komponente erbt von UICommand.
    In den encode-Methoden wird nur ein Div-Element gerendert. Ziel ist es, mit einem Klick auf das Div-Element den ActionListener aufzurufen.

    Leider wird dieser nicht aufgerufen und ich habe keine Ahnung warum!


    Hier der Taghandler der Komponente:
    Code :
    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
    
    public class ActionTag extends UIComponentELTag {
     
        private javax.el.MethodExpression actionListener = null;
     
        @Override
        public String getComponentType() {
            return "components.UIAction";
        }
     
        @Override
        public String getRendererType() {
            return null;
        }
     
        public void setActionListener(MethodExpression actionListener) {
            this.actionListener = actionListener;
        }
         
        protected void setProperties(UIComponent component) {
            super.setProperties(component);
            UIAction action = null;
            try {
                action = (UIAction) component;
            } catch (ClassCastException cce) {
                throw new IllegalStateException(
                        "Component "
                                + component.toString()
                                + " ist nicht der erwartete Typ");
            }
            if (actionListener != null) {
                action.addActionListener(new MethodExpressionActionListener(
                        actionListener));
            }
        }
    }

    Hier die Komponente:
    Code :
    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
    36
    37
    38
    39
    40
    
    public class UIAction extends UICommand implements MyListener {
     
        public UIAction() {
            super();
            setRendererType(null);
        }
        
        public void encodeBegin(FacesContext context) throws IOException {
            if (context == null)
                throw new NullPointerException();
            ResponseWriter writer = context.getResponseWriter();
            writer.startElement("div", this);
            writer.writeAttribute("onclick", "alert('test');", null);
        }
     
        
     
        public void encodeEnd(FacesContext context) throws IOException {
            if (context == null)
                throw new NullPointerException();
     
            ResponseWriter writer = context.getResponseWriter();
            writer.endElement("div");
        }
     
        @Override
        public void decode(FacesContext context) {
            if (context == null) {
                throw new NullPointerException();
            }
            MyEvent event = new MyEvent(this);
            event.queue();
        }
     
        public void processAction(MyEvent event) {
            System.out.println("processAction(MyEvent event)");
     
        }
     
    }

    Hier der Eintrag in der faces-config Datei:
    Code :
    1
    2
    3
    4
    5
    6
    
    ...
    <component>
            <component-type>components.UIAction</component-type>
            <component-class>components.UIAction</component-class>
    </component>
    ...

    die das Tag in der tld-datei:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    <tag>
            <name>actionComp</name>
            <tag-class>components.ActionTag</tag-class>
            <body-content>JSP</body-content>
            <!--  Attribute -->
            <attribute>
                <name>id</name>
                <required>false</required>
            </attribute>
            <attribute>
                <name>actionListener</name>
                    <required>false</required>
                    <deferred-method>
                        <method-signature>void   actionListener(javax.faces.event.ActionEvent)</method-signature>
                    </deferred-method>
            </attribute>
    </tag>

    Hier meine Eventklasse:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    public class MyEvent extends FacesEvent {
        private static final long serialVersionUID = 5009099988768540892L;
     
        public MyEvent(UIComponent source) {
            super(source);
        }
        @Override
        public boolean isAppropriateListener(FacesListener listener) {
            return (listener instanceof MyListener);    
        }
        @Override
        public void processListener(FacesListener listener) {
            ((MyListener)listener).processAction(this);
        }
    }
    Hier mein listenerinterface:
    Code :
    1
    2
    3
    
    public interface MyListener extends FacesListener{  
        public void processAction(MyEvent event);
    }

    Aufgerufen wird die Komponente in der .jsp wie folgt:
    Code :
    1
    2
    3
    
    ...
    <test:actionComp actionListener="#{testBean.test}">actionTest</test:actionComp>
    ...

    hier noch die BeanMethode:
    Code :
    1
    2
    3
    4
    5
    6
    
    ...
    public void test(MyEvent event)
        {
            System.out.println("test");
        }
    ...


    Falls jemand helfen kann, wäre ich sehr dankbar

    gruß
    larlib
    Geändert von larlib (13.07.08 um 11:45 Uhr) Grund: MyListener erbt von FacesListener
     

Ähnliche Themen

  1. Antworten: 10
    Letzter Beitrag: 26.09.09, 14:47
  2. Funktion wird nicht aufgerufen
    Von blck im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 10.09.09, 16:29
  3. DllMain wird gar nicht aufgerufen :(
    Von Akilein im Forum C/C++
    Antworten: 7
    Letzter Beitrag: 30.08.06, 00:23
  4. paint() wird nicht aufgerufen.
    Von redX im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 4
    Letzter Beitrag: 20.09.05, 10:05
  5. php-Script wird nicht aufgerufen
    Von kesnw im Forum PHP
    Antworten: 1
    Letzter Beitrag: 31.03.04, 01:49