ERLEDIGT
NEIN
NEIN
ANTWORTEN
0
0
ZUGRIFFE
1259
1259
EMPFEHLEN
-
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:
Hier mein listenerinterface: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); } }
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ß
larlibGeändert von larlib (13.07.08 um 11:45 Uhr) Grund: MyListener erbt von FacesListener
Ähnliche Themen
-
Kindklassenkonstruktor wird nicht aufgerufen
Von Anbrix im Forum C/C++Antworten: 10Letzter Beitrag: 26.09.09, 14:47 -
Funktion wird nicht aufgerufen
Von blck im Forum Javascript & AjaxAntworten: 4Letzter Beitrag: 10.09.09, 16:29 -
DllMain wird gar nicht aufgerufen :(
Von Akilein im Forum C/C++Antworten: 7Letzter Beitrag: 30.08.06, 00:23 -
paint() wird nicht aufgerufen.
Von redX im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 4Letzter Beitrag: 20.09.05, 10:05 -
php-Script wird nicht aufgerufen
Von kesnw im Forum PHPAntworten: 1Letzter Beitrag: 31.03.04, 01:49





Zitieren
Login





