I am having trouble using the Tomahawk schedule (see 
http://myfaces.apache.org/tomahawk/schedule.html ) component in a simple Seam 
application.  The component renders the day view regardless of the mode or the 
addition of any entries to the ScheduleModel.  Based on the lack of debugging 
output, it does not appear to get a reference to my ScheduleModel 
implementation.  (I am subclassing SimpleScheduleModule provided by the 
Tomahawk library such that its getter and setter methods produce log messages, 
but again, I get no output.)  Others have reported varying degrees of success 
(see http://mail-archives.apache.org/mod_mbox/myfaces-users/200607.mbox/[EMAIL 
PROTECTED] ) with this component when used with Seam, but I basically get 
nothing, not even any exceptions.

I have attempted to use both the 1.1.4 and 1.1.5 Tomahawk snapshot releases.  I 
am using Facelets with Seam and JBoss AS 1.0.1.GA.  (Other Seam applications 
work flawlessly, by the way.)  Other Tomahawk components are working just fine 
after following the instructions found at 
http://wiki.apache.org/myfaces/Use_Facelets_with_Tomahawk .  I have added the 
following tag to my Facelets tag library definition.

<?xml version="1.0"?>
  | <!DOCTYPE facelet-taglib PUBLIC "-//Sun Microsystems, Inc.//DTD Facelet 
Taglib 1.0//EN" "http://java.sun.com/dtd/facelet-taglib_1_0.dtd";>
  | <facelet-taglib>
  |     <namespace>http://myfaces.apache.org/tomahawk</namespace>
  |     <!-- ... -->
  |     <tag>
  |             <tag-name>schedule</tag-name>
  |             <component>
  |                     
<component-type>org.apache.myfaces.Schedule</component-type>
  |             </component>
  |     </tag>
  |     <!-- ... -->
  | </facelet-taglib>

The web application deployment descriptor follows.

<?xml version="1.0" encoding="UTF-8"?>
  | <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
  |     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd";>
  |     <listener>
  |             
<listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
  |     </listener>
  | 
  |     <listener>
  |             
<listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
  |     </listener>
  | 
  |     <filter>
  |             <filter-name>Seam Exception Filter</filter-name>
  |             
<filter-class>org.jboss.seam.servlet.SeamExceptionFilter</filter-class>
  |     </filter>
  | 
  |     <filter>
  |             <filter-name>Seam Redirect Filter</filter-name>
  |             
<filter-class>org.jboss.seam.servlet.SeamRedirectFilter</filter-class>
  |     </filter>
  | 
  |     <filter-mapping>
  |             <filter-name>Seam Exception Filter</filter-name>
  |             <url-pattern>/*</url-pattern>
  |     </filter-mapping>
  | 
  |     <filter-mapping>
  |             <filter-name>Seam Redirect Filter</filter-name>
  |             <url-pattern>*.seam</url-pattern>
  |     </filter-mapping>
  | 
  |     <context-param>
  |             <param-name>javax.faces.AUTO_SCROLL</param-name>
  |             <param-value>true</param-value>
  |     </context-param>
  | 
  |     <context-param>
  |             <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
  |             <param-value>client</param-value>
  |     </context-param>
  | 
  |     <context-param>
  |             <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
  |             <param-value>.xhtml</param-value>
  |     </context-param>
  | 
  |     <context-param>
  |             <param-name>facelets.DEVELOPMENT</param-name>
  |             <param-value>true</param-value>
  |     </context-param>
  | 
  |     <context-param>
  |             <param-name>facelets.LIBRARIES</param-name>
  |             <param-value>/WEB-INF/tomahawk.facelets.xml</param-value>
  |     </context-param>
  | 
  |     <servlet>
  |             <servlet-name>Faces Servlet</servlet-name>
  |             <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  |             <load-on-startup>1</load-on-startup>
  |     </servlet>
  | 
  |     <servlet-mapping>
  |             <servlet-name>Faces Servlet</servlet-name>
  |             <url-pattern>*.seam</url-pattern>
  |     </servlet-mapping>
  | 
  |     <servlet-mapping>
  |             <servlet-name>Faces Servlet</servlet-name>
  |             <url-pattern>*.jsf</url-pattern>
  |     </servlet-mapping>
  | 
  |     <!--
  |     
  |         MyFaces extensions filter.  See 
http://myfaces.apache.org/tomahawk/extensionsFilter.html
  |         for details.
  |     
  |     -->
  |     <filter>
  |             <filter-name>MyFaces Extensions Filter</filter-name>
  |             
<filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
  |             <init-param>
  |                     <param-name>maxFileSize</param-name>
  |                     <param-value>20m</param-value>
  |             </init-param>
  |     </filter>
  | 
  |     <filter-mapping>
  |             <filter-name>MyFaces Extensions Filter</filter-name>
  |             <servlet-name>Faces Servlet</servlet-name>
  |     </filter-mapping>
  | 
  |     <filter-mapping>
  |             <filter-name>MyFaces Extensions Filter</filter-name>
  |             <url-pattern>/faces/*</url-pattern>
  |     </filter-mapping>
  | </web-app>

JavaServer Faces configuration follows.

<?xml version="1.0" encoding="UTF-8"?>
  | <!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer 
Faces Config 1.0//EN" "http://java.sun.com/dtd/web-facesconfig_1_0.dtd";>
  | <faces-config>
  |     <application>
  |             <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
  |     </application>
  | 
  |     <lifecycle>
  |             
<phase-listener>org.jboss.seam.jsf.SeamExtendedManagedPersistencePhaseListener</phase-listener>
  |     </lifecycle>
  | 
  |     <managed-bean>
  |             <managed-bean-name>today</managed-bean-name>
  |             <managed-bean-class>java.util.Date</managed-bean-class>
  |             <managed-bean-scope>application</managed-bean-scope>
  |     </managed-bean>
  | 
  |     <managed-bean>
  |             <managed-bean-name>foo</managed-bean-name>
  |             
<managed-bean-class>com.mycompany.scheduler.DummyScheduleModel</managed-bean-class>
  |             <managed-bean-scope>session</managed-bean-scope>
  |             <managed-property>
  |                     <property-name>mode</property-name>
  |                     <value>3</value>
  |             </managed-property>
  |             <managed-property>
  |                     <property-name>selectedDate</property-name>
  |                     <value>#{today}</value>
  |             </managed-property>
  |     </managed-bean>
  | 
  |     <managed-bean>
  |             <managed-bean-name>bar</managed-bean-name>
  |             
<managed-bean-class>com.mycompany.scheduler.TriggerScheduleController</managed-bean-class>
  |             <managed-bean-scope>session</managed-bean-scope>
  |             <managed-property>
  |                     <property-name>model</property-name>
  |                     <value>#{foo}</value>
  |             </managed-property>
  |     </managed-bean>
  | </faces-config>

Sample implementation of ScheduleModel.

package com.mycompany.scheduler;
  | 
  | import java.util.Calendar;
  | import java.util.Date;
  | 
  | import org.apache.myfaces.custom.schedule.model.DefaultScheduleEntry;
  | import org.apache.myfaces.custom.schedule.model.ScheduleEntry;
  | import org.apache.myfaces.custom.schedule.model.ScheduleModel;
  | import org.apache.myfaces.custom.schedule.model.SimpleScheduleModel;
  | 
  | public class DummyScheduleModel extends SimpleScheduleModel
  | {
  |     public DummyScheduleModel()
  |     {
  |         super();
  |         final Calendar calendar = Calendar.getInstance();
  |         calendar.setTime(new Date());
  |         final DefaultScheduleEntry entry = new DefaultScheduleEntry();
  |         entry.setId("dummyEntry");
  |         entry.setStartTime(calendar.getTime());
  |         calendar.add(Calendar.MINUTE, 45);
  |         entry.setEndTime(calendar.getTime());
  |         entry.setTitle("Test MyFaces schedule component");
  |         entry.setSubtitle("my office");
  |         entry.setDescription("We need to get this thing out of the sandbox 
ASAP.");
  |         setMode(ScheduleModel.WEEK);
  |         addEntry(entry);
  |         refresh();
  |         System.err.println("Created DummyScheduleModel instance with an 
event on "
  |                            + entry.getStartTime() + ".");
  |     }
  | 
  |     public boolean isEmpty()
  |     {
  |         System.err.println("Called isEmpty (" + super.isEmpty() + ")");
  |         return super.isEmpty();
  |     }
  | 
  |     public Date getSelectedDate()
  |     {
  |         System.err.println("Called getSelectedDate (" + 
super.getSelectedDate() + ")");
  |         return super.getSelectedDate();
  |     }
  | 
  |     public ScheduleEntry getSelectedEntry()
  |     {
  |         System.err.println("Called getSelectedEntry (" + 
super.getSelectedEntry() + ")");
  |         return super.getSelectedEntry();
  |     }
  | 
  |     public boolean isEntrySelected()
  |     {
  |         System.err.println("Called isEntrySelected (" + 
super.isEntrySelected() + ")");
  |         return super.isEntrySelected();
  |     }
  | 
  |     public int getMode()
  |     {
  |         System.err.println("Called getMode (" + super.getMode() + ")");
  |         return super.getMode();
  |     }
  | 
  |     public Object get(int i)
  |     {
  |         System.err.println("Called get (" + super.get(i) + ")");
  |         return super.get(i);
  |     }
  | 
  |     public boolean containsDate(Date date)
  |     {
  |         System.err.println("Called containsDate (" + 
super.containsDate(date) + ")");
  |         return super.containsDate(date);
  |     }
  | 
  |     public int size()
  |     {
  |         System.err.println("Called size (" + super.size() + ")");
  |         return super.size();
  |     }
  | }

My simple "controller" class.

package com.mycompany.scheduler;
  | 
  | import java.text.DateFormat;
  | import java.text.SimpleDateFormat;
  | 
  | import org.apache.myfaces.custom.schedule.model.ScheduleModel;
  | 
  | public class TriggerScheduleController
  | {
  |     private ScheduleModel model;
  | 
  |     public ScheduleModel getModel()
  |     {
  |         System.err.println("Giving model " + model);
  |         return model;
  |     }
  | 
  |     public void setModel(final ScheduleModel model)
  |     {
  |         System.err.println("Got model " + model);
  |         this.model = model;
  |     }
  | }

Note that I started with TriggerScheduleController as a stateful session bean.  
The class had the following annotations.

@Stateful
  | @Name("triggerSchedule")
  | @Scope(SESSION)

And these methods.

@Create
  | public void create()
  | {
  |     setModel(new DummyScheduleModel());
  |     getModel().setMode(ScheduleModel.MONTH);
  | }
  | 
  | @Destroy
  | @Remove
  | public void destroy()
  | {
  | }

The view, browse.xhtml, contains the following (note it fills in a template).

<?xml version="1.0" encoding="utf-8"?>
  | <ui:composition xmlns:f="http://java.sun.com/jsf/core"; 
xmlns:h="http://java.sun.com/jsf/html";
  |     xmlns:s="http://jboss.com/products/seam/taglib"; 
xmlns:t="http://myfaces.apache.org/tomahawk";
  |     xmlns:ui="http://java.sun.com/jsf/facelets"; template="/template.xhtml">
  |     <ui:define name="title-text">Schedule</ui:define>
  | 
  |     <ui:define name="content">
  |             <div class="Section">
  |                     <h2>
  |                             <span>Browse</span>
  |                     </h2>
  | 
  |                     <h:form>
  |                             <t:schedule id="triggerSchedule" 
value="#{bar.model}" rendered="true" theme="evolution" tooltip="true"
  |                                     visibleEndHour="18" 
visibleStartHour="8" workingEndHour="17" workingStartHour="9" readonly="false"/>
  |                     </h:form>
  |             </div>
  |     </ui:define>
  | </ui:composition>

When exploded, my deployment in JBoss appears as follows.

/
  |   scheduler.jar!/
  |     META-INF/
  |       ejb-jar.xml
  |       persistence.xml
  |     seam.properties
  |     (project classes)
  |   scheduler.war/
  |     WEB-INF/
  |       lib/
  |         tomahawk-1.1.[45].jar
  |         facelets-1.1.11.jar
  |         commons-lang-2.1.jar
  |         el-ri.jar
  |         jboss-seam-ui-1.0.1.GA.Jar
  |         el-api.jar
  |       web.xml
  |       components.xml
  |       pages.xml
  |       faces-config.xml
  |       tomahawk.facelets.xml
  |     browse.xhtml
  |     template.xhtml
  |   META-INF/
  |     application.xml
  |     jboss-app.xml
  |   jboss-seam-1.0.1.GA.jar
  |   tomahawk-1.1.[45].jar
  | 

And for reference, application.xml contains this.

<?xml version="1.0" encoding="UTF-8"?>
  | <application xmlns="http://java.sun.com/xml/ns/j2ee"; version="1.4" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
  |         xsi:schemaLocation="http://java.sun.com /xml/ns/j2ee
  |         http://java.sun.com/xml/ns/j2ee/application_1_4.xsd";>
  |         <display-name>Scheduler</display-name>
  |         <module>
  |                 <web>
  |                         <web-uri>scheduler.war</web-uri>
  |                         <context-root>/scheduler</context-root>
  |                 </web>
  |         </module>
  |         <module>
  |                 <ejb>scheduler.jar</ejb>
  |         </module>
  |         <module>
  |                 <java>jboss-seam-1.0.1.GA.jar</java>
  |         </module>
  |         <module>
  |                 <java>tomahawk-1.1.[45].jar</java>
  |         </module>
  | </application>
  | 

Of course, when I was using a stateful bean, I was passing that through the 
value attribute of t:schedule.  In that case, I have be supplying the @Out 
annotation on the model field.  I have even tried making the bean extend 
SimpleScheduleModel itself and pass it directly.  The configuration you see 
here is to mimick the known-working example provided by the MyFaces project 
(their examples work when deployed in JBoss).

If I upgrade the MyFaces library in JBoss's Tomcat deployment (tried both 1.1.4 
and 1.1.5 snapshots), things become even more broken.  And again, as mentioned, 
no messages with the exception of the println statement in the constructor are 
produced at runtime.

So, does anyone have any idea what I am doing wrong?

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3970745#3970745

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3970745
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to