I use Shale, MyFaces, and Tiles and am very satisfied with that combination. I 
try to stay fairly current using the Shale nightly builds (I am currently using 
20070817). My versions are Shale 1.1.0, MyFaces 1.1.5, Tomahawk 1.1.5, and 
Tiles "tiles-core-2.0-r468346-SNAPSHOT.jar". Excerpts from my files follow:

----------faces-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC
  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
  "http://java.sun.com/dtd/web-facesconfig_1_1.dtd";>

<faces-config>
  
  <!-- Tiles Integration -->
  <application>    
    <view-handler>
      org.apache.shale.tiles.TilesViewHandler
    </view-handler>
  </application>

-------------- faces-config-rules.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC
  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
  "http://java.sun.com/dtd/web-facesconfig_1_1.dtd";>


<faces-config>
  
  <navigation-rule>
    <from-view-id>/contactsLocaleMnt.jsp</from-view-id>
    <navigation-case>
      <from-outcome>cancel</from-outcome>
      <to-view-id>/contactsLocaleMntSearch.jsp</to-view-id>
    </navigation-case>
  </navigation-rule>
  
  <navigation-rule>
    <from-view-id>/contactsLocaleMntSearch.jsp</from-view-id>
    <navigation-case>
      <from-outcome>cancel</from-outcome>
      <to-view-id>/menuContacts.jsp</to-view-id>
    </navigation-case>
    <navigation-case>
      <from-outcome>testClear</from-outcome>
      <to-view-id>/contactsLocaleMnt.jsp</to-view-id>
    </navigation-case>
    <navigation-case>
      <from-outcome>new</from-outcome>
      <to-view-id>/contactsLocaleMnt.jsp</to-view-id>
    </navigation-case>
    <navigation-case>
      <from-outcome>selected</from-outcome>
      <to-view-id>/contactsLocaleMnt.jsp</to-view-id>
    </navigation-case>    
  </navigation-rule>
  
  <navigation-rule>
    <from-view-id>/systemLogoff.jsp</from-view-id>
    <navigation-case>
      <from-outcome>cancel</from-outcome>
      <to-view-id>/menuHome.jsp</to-view-id>
    </navigation-case>
    <navigation-case>
      <from-outcome>success</from-outcome>
      <to-view-id>/systemLogon.jsp</to-view-id>
    </navigation-case>
  </navigation-rule>
  
  <navigation-rule>
    <from-view-id>/systemLogon.jsp</from-view-id>
    <navigation-case>
      <from-outcome>success</from-outcome>
      <to-view-id>/menuHome.jsp</to-view-id>
    </navigation-case>
  </navigation-rule>
  
  <navigation-rule>
    <from-view-id>/systemLogoff.jsp</from-view-id>
    <navigation-case>
      <from-outcome>cancel</from-outcome>
      <to-view-id>/menuHome.jsp</to-view-id>
    </navigation-case>
    <navigation-case>
      <from-outcome>success</from-outcome>
      <to-view-id>/systemLogon.jsp</to-view-id>
    </navigation-case>
  </navigation-rule>
  
  <navigation-rule>
    <from-view-id>*</from-view-id>
    <navigation-case>
      <from-outcome>contactsLocaleMntSearch</from-outcome>
      <to-view-id>/contactsLocaleMntSearch.jsp</to-view-id>
    </navigation-case>
    <navigation-case>
      <from-outcome>menuHome</from-outcome>
      <to-view-id>/menuHome.jsp</to-view-id>
    </navigation-case>
    <navigation-case>
      <from-outcome>systemLogoff</from-outcome>
      <to-view-id>/systemLogoff.jsp</to-view-id>
    </navigation-case>

------------- starraLayout.jsp 
<f:view>
<html>
<head>
  <link href="<h:outputText 
value="#{facesContext.externalContext.requestContextPath}"/><h:outputText 
value="#{msg['style.base']}"/>"
    rel="stylesheet"
    type="text/css"/>
  <title><tiles:attribute flush="false" name="title"/></title>
</head>

<body background="<h:outputText 
value="#{facesContext.externalContext.requestContextPath}"/><h:outputText 
value="#{msg['img.background.app']}"/>"/>
<table border="0" cellspacing="5" width="100%" >
  <tr>
    <td colspan="2"><tiles:attribute flush="false" name="header"/></td>
  </tr>
  <tr>
    <td valign="top" width="13%">
      <tiles:attribute flush="false" name="menuBar"/>
    </td>
    <td valign="top">
      <tiles:attribute flush="false" name="body"/>
    </td>    
  </tr>
  <tr>
    <td align="center" colspan="2">
      <tiles:attribute flush="false" name="info"/>
    </td>
  </tr>
  <tr>
    <td align="center" colspan="2">
      <tiles:attribute flush="false" name="footer"/>
    </td>
  </tr>
</table>
</body>
</html>
</f:view>  
 
------------- index.jsp
  <jsp:forward page="systemLogon.faces"/>

<------------ logon.jsp
 
<%@ include file="/jspf/common/taglibs.jsp" %>
<%@ include file="/jspf/common/messages.jsp" %>

<h:form id="logon">
      
  <h:panelGrid
    border="1"
    cellspacing="2"
    cellpadding="2"
    columns="2"
    footerClass="starraPanelGridFooter"
    headerClass="starraPanelGridHeader"
    styleClass="starraBody">
    
    <f:facet name="header">
      <h:outputText value="#{msg['class.system.Logon']}"/>
    </f:facet>
      
    <h:outputLabel for="logonName">
      <h:outputText  value="#{msg['app.Logon.name']}"/>
      <h:outputText value="#{msg['symbol.sep1']}"/>
    </h:outputLabel>
    <h:panelGroup>
      <h:inputText id="logonName" maxlength="24" required="true" size="24" 
value="#{systemLogon.logonName}">
        <f:validateLength minimum="4" maximum="24"/>
      </h:inputText>
      <h:message for="logonName" styleClass="starraMsgError"/>        
    </h:panelGroup>

    <h:outputLabel for="logonPassword">
      <h:outputText value="#{msg['app.Logon.password']}"/>
      <h:outputText value="#{msg['symbol.sep1']}"/>
    </h:outputLabel>
    <h:panelGroup>
      <h:inputText id="logonPassword" maxlength="24" required="true" size="24" 
value="#{systemLogon.logonPassword}">
        <f:validateLength minimum="4" maximum="24"/>
      </h:inputText>
      <h:message for="logonPassword" styleClass="starraMsgError"/>
    </h:panelGroup> 
      
    <f:facet name="footer">
      <h:panelGroup styleClass="starraButtons">
        <h:commandButton action="#{systemLogon.logon}" id="logonSub1" 
value="#{msg['button.Submit']}"/>
      </h:panelGroup>
    </f:facet>      
      
  </h:panelGrid>    
    
</h:form>

--------------------- localeMnt.jsp
 <%@ include file="/jspf/common/taglibs.jsp" %>
<%@ include file="/jspf/common/messages.jsp" %>

<t:saveState id="ssBean" value="#{contactsLocaleMnt.ssBean}"/>
<t:saveState id="ssBean1" value="#{contactsLocaleMnt.ssBean1}"/>

<h:form id="localeMnt">

  <h:panelGrid
    border="1"
    cellspacing="2"
    cellpadding="2"
    columns="2"
    footerClass="starraPanelGridFooter"
    headerClass="starraPanelGridHeader"
    styleClass="starraBody">
    
    <f:facet name="header">
      <h:outputText value="#{msg['class.contacts.LocaleMnt']}"/>
    </f:facet>
    
    <f:facet name="footer">
      <h:panelGroup styleClass="starraButtons">
        <h:commandButton action="#{contactsLocaleMnt.create}"
          id="mntButtonsCreate"
          value="#{msg['button.Create']}"/>
        <h:commandButton action="#{contactsLocaleMnt.update}"
          id="mntButtonsUpdate"
          value="#{msg['button.Update']}"/>
        <h:commandButton action="#{contactsLocaleMnt.delete}"
          id="mntButtonsDelete"
          value="#{msg['button.Delete']}"/>
        <%@ include file="/jspf/common/mntButtons1.jsp" %> 
        <h:commandButton action="#{contactsLocaleMnt.clearMnt}"
          id="mntButtonsClear"
          value="#{msg['button.Clear']}"/>
        <%@ include file="/jspf/common/mntButtons2.jsp" %>
      </h:panelGroup>      
    </f:facet> 
    
    <h:outputLabel styleClass="starraReadonly">
      <h:outputText value="#{msg['app.Locale.id']}"/>
      <h:outputText value="#{msg['symbol.sep1']}"/>
    </h:outputLabel>
    <h:panelGroup>
      <h:inputText id="syLocaleId" readonly="true" 
value="#{contactsLocaleMnt.ssBean.syLocaleId}"/>
    </h:panelGroup>
    
    <h:outputLabel for="name">
      <h:outputText  value="#{msg['app.Name']}"/>
      <h:outputText value="#{msg['symbol.sep1']}"/>
    </h:outputLabel>
    <h:panelGroup>
      <h:inputText id="name" maxlength="32" required="true" size="32" 
value="#{contactsLocaleMnt.ssBean.name}">
        <f:validateLength minimum="4" maximum="32"/>
      </h:inputText>
      <h:message for="name" styleClass="starraMsgError"/>        
    </h:panelGroup>
    
 ...
    
</h:form>

-----------------------------web.xml
<?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";>
  

  <!-- Display name for this application -->
  <display-name>Starr Accounting</display-name>

  <!-- Select JSF State Saving Mode -->
  <context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
  </context-param>

  <!-- JSF Configuration Resources (comma-separated list) -->
  <context-param>
    <param-name>javax.faces.CONFIG_FILES</param-name>
    <param-value>
      /WEB-INF/conf/faces-config.xml,
      /WEB-INF/conf/faces-config-beans.xml,
      /WEB-INF/conf/faces-config-menus.xml,
      /WEB-INF/conf/faces-config-rules.xml
    </param-value>
  </context-param>

  <!-- Commons Chain Configuration Resources -->
  <context-param>
    <param-name>org.apache.commons.chain.CONFIG_WEB_RESOURCE</param-name>
    <param-value>/WEB-INF/conf/chain-config.xml</param-value>
  </context-param>

  <!-- Dialog Configuration Resources (comma-separated list) -->
  <context-param>
    <param-name>org.apache.shale.dialog.CONFIGURATION</param-name>
    <param-value>/WEB-INF/conf/dialog-config.xml</param-value>
  </context-param>

  <!-- Spring ApplicationContext Configuration (space separated list) -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/conf/spring.xml</param-value>
  </context-param>
  <listener>
    <listener-class>
      org.springframework.web.context.ContextLoaderListener
    </listener-class>
  </listener>
  <listener>
    <listener-class>
      com.starrcs.common.SpringInitListener
    </listener-class>
  </listener>

  <!-- Tiles -->
  <context-param>
    <param-name>definitions-config</param-name>
    <param-value>/WEB-INF/conf/tiles.xml</param-value>
  </context-param>
  <listener>
    <listener-class>
      org.apache.tiles.listener.TilesListener
    </listener-class>
  </listener>

  <!-- Shale Application Controller Filter -->
  <filter>
    <filter-name>shale</filter-name>
    <filter-class>
      org.apache.shale.application.faces.ShaleApplicationFilter
    </filter-class>
  </filter>
  <!-- Shale Application Controller Filter Mapping -->
  <filter-mapping>
    <filter-name>shale</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
  </filter-mapping>
  
  <!-- Commons Chain Configuration Listener -->
  <listener>
    <listener-class>
      org.apache.commons.chain.web.ChainListener
    </listener-class>
  </listener>

  <!-- Initialize singletons -->
  <listener>
    <listener-class>
      com.starrcs.common.StarraInitListener
    </listener-class>
  </listener>
  
  <session-config>
    <session-timeout>30</session-timeout>
  </session-config>
  
  <!-- Session filter -->  
  <filter>
    <filter-name>sessionFilter</filter-name>
    <filter-class>com.starrcs.common.SessionFilter</filter-class>
  </filter>
   <filter-mapping>
    <filter-name>sessionFilter</filter-name>
    <url-pattern>*.faces</url-pattern>
  </filter-mapping>
    
  <!-- JavaServer Faces Servlet Configuration -->
  <servlet>
    <servlet-name>faces</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
  </servlet>
  <!-- JavaServer Faces Servlet Mapping -->
  <servlet-mapping>
    <servlet-name>faces</servlet-name>
    <url-pattern>*.faces</url-pattern>
  </servlet-mapping>
  
  <servlet>
    <servlet-name>log4j-init</servlet-name>
      <servlet-class>com.starrcs.system.Log4jInitServlet</servlet-class>
    <init-param>
      <param-name>log4j-init-file</param-name>
      <param-value>/WEB-INF/conf/log4j.properties</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <!-- Welcome File List -->
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/tiles/common/error.faces</location>
  </error-page>
  <error-page>
    <exception-type>javax.faces.FacesException</exception-type>
    <location>/tiles/common/error.faces</location>
  </error-page>
  <error-page>
    <error-code>500</error-code>
    <location>/tiles/common/error.faces</location>
  </error-page>

</web-app>









Reply via email to