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:
Hier die Komponente:
Hier der Eintrag in der faces-config Datei:
die das Tag in der tld-datei:
Hier meine Eventklasse:
Hier mein listenerinterface:
Aufgerufen wird die Komponente in der .jsp wie folgt:
hier noch die BeanMethode:
Falls jemand helfen kann, wäre ich sehr dankbar
gruß
larlib
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:
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:
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:
...
<component>
<component-type>components.UIAction</component-type>
<component-class>components.UIAction</component-class>
</component>
...
die das Tag in der tld-datei:
Code:
<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:
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:
public interface MyListener extends FacesListener{
public void processAction(MyEvent event);
}
Aufgerufen wird die Komponente in der .jsp wie folgt:
Code:
...
<test:actionComp actionListener="#{testBean.test}">actionTest</test:actionComp>
...
hier noch die BeanMethode:
Code:
...
public void test(MyEvent event)
{
System.out.println("test");
}
...
Falls jemand helfen kann, wäre ich sehr dankbar

gruß
larlib
Zuletzt bearbeitet: