Hi Milan,
I run into a similar problem some month ago. I debuged the class
org.apache.myfaces.custom.schedule.ScheduleTagHandler
This is original class:
/**
*
* @since 1.1.7
*/
public class ScheduleTagHandler extends ComponentHandler {
private static final String MOUSE_LISTENER = "mouseListener";
private static final Class [] mouseListenerParamList = new
Class[]{ScheduleMouseEvent.class};
public ScheduleTagHandler(ComponentConfig tagConfig) {
super(tagConfig);
}
protected MetaRuleset createMetaRuleset(Class type)
{
return super.createMetaRuleset(type).alias("class", "styleClass")
.addRule(
new MethodRule(MOUSE_LISTENER,
String.class, mouseListenerParamList));
}
}
I found that the MOUSE_LISTENER is not listening on mouseListener but on
mouseListenerExpression (see myfaces-metadata.xml definition of type
org.apache.myfaces.UISchedule).
So I have changed the class to:
public class ScheduleTagHandler extends HtmlComponentHandler {
private static final String MOUSE_LISTENER = "mouseListenerExpression";
public ScheduleTagHandler(ComponentConfig tagConfig) {
super(tagConfig);
}
@Override
protected MetaRuleset createMetaRuleset(Class type)
{
return super.createMetaRuleset(type).alias("class", "styleClass")
.addRule(
new MethodRule(MOUSE_LISTENER,
String.class, new Class[]
{ScheduleMouseEvent.class}));
}
}
After I changed the class, the method assigned to
mouseListenerExpression was called on the clickEvents in the t:scheduled
tag.
I never found an confirmation that this is the correct way to handle this.
Georg
Am 22.01.2012 08:18, schrieb Milan Durovic:
Hi,
I'm trying to handle mouse click events over schedule entries in t:schedule
Tomahawk component. In the page definition I have:
<t:schedule value="#{allEvents.model}" id="myEvents"
rendered="true" readonly="false"
theme="#{allEvents.theme}" tooltip="true"
mouseListener="#{allEvents.clicked}"
entryRenderer="#{allEvents.renderer}"
headerDateFormat="#{allEvents.headerDateFormat}"
expandToFitEntries="true"
splitWeekend="false"
/>
and the method is defined as:
public String clicked( ScheduleMouseEvent event )
{
switch( event.getEventType() )
…
Originally, method "clicked" was void, but I changed this to returning String, after
looking at the source code of the ScheduleTagHandler class, "createMetaRuleset" method.
However, in either case, it doesn't work. "clicked" method never gets invoked,
and in logs I can't find anything that would indicate if something was wrong.
I was using MyFaces JSF 2.0, then upgraded to JSF 2.1 - no change. t:schedule
component works in every aspect (i.e. displaying entries, asking for new
entries when the model changes selectedDate etc etc) EXCEPT for capturing mouse
clicks.
I remember long ago when I first used this class, capturing events worked,
however, I didn't need it. Now I need it, but it doesn't work. I'm using
facelets - mentioning this because I saw some people had problems making this
work with facelets, but those problems seem to be restricted to several years
ago, before facelets got integrated with MyFaces.
Any ideas what's wrong here?
Regards,
Milan