Sitemesh with Springs Example

decorators.xml

<?xml version="1.0" encoding="UTF-8"?>

<decorators defaultdir="/WEB-INF/decorators">
<decorator name="main" page="main.jsp">
<pattern>/*</pattern>
</decorator>
</decorators>

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">
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>
index.jsp
</welcome-file>
</welcome-file-list>
</web-app>

indexController.java

package com;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

public class indexController extends MultiActionController {

public ModelAndView company(HttpServletRequest request, HttpServletResponse response) {
return new ModelAndView("WEB-INF/jsp/company.jsp");
}

public ModelAndView college(HttpServletRequest request, HttpServletResponse response) {
return new ModelAndView("WEB-INF/jsp/college.jsp");
}

public ModelAndView hr(HttpServletRequest request, HttpServletResponse response) {
return new ModelAndView("WEB-INF/jsp/hr.jsp");
}
public ModelAndView pm(HttpServletRequest request, HttpServletResponse response) {
return new ModelAndView("WEB-INF/jsp/pm.jsp");
}

public ModelAndView tl(HttpServletRequest request, HttpServletResponse response) {
return new ModelAndView("WEB-INF/jsp/tl.jsp");
}

public ModelAndView cricketcap(HttpServletRequest request, HttpServletResponse response) {
return new ModelAndView("WEB-INF/jsp/cricketcap.jsp");
}

public ModelAndView cricketplayer(HttpServletRequest request, HttpServletResponse response) {
return new ModelAndView("WEB-INF/jsp/cricketplayer.jsp");
}

public ModelAndView crickettm(HttpServletRequest request, HttpServletResponse response) {
return new ModelAndView("WEB-INF/jsp/crickettm.jsp");
}

public ModelAndView collegelect(HttpServletRequest request, HttpServletResponse response) {
return new ModelAndView("WEB-INF/jsp/collegelect.jsp");
}
public ModelAndView collegeprin(HttpServletRequest request, HttpServletResponse response) {
return new ModelAndView("WEB-INF/jsp/collegeprin.jsp");
}

public ModelAndView collegestud(HttpServletRequest request, HttpServletResponse response) {
return new ModelAndView("WEB-INF/jsp/collegestud.jsp");
}

public ModelAndView cricket(HttpServletRequest request, HttpServletResponse response) {
return new ModelAndView("WEB-INF/jsp/cricket.jsp");
}
public ModelAndView employee(HttpServletRequest request, HttpServletResponse response) {
return new ModelAndView("WEB-INF/jsp/employee.jsp");
}


}


menu.xsl

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="1.0" encoding="UTF-8" omit-xml-declaration="yes"/>
<xsl:param name="id" select="'1'" />

<xsl:template match="/">
<xsl:apply-templates select="menu"/>
</xsl:template>

<xsl:template match="menu">
<div class="navset" id="nav">
<div class="hd">
<ul>
<xsl:apply-templates select="item" />
</ul>
</div>
<div class="bd">
<ul>
<xsl:apply-templates select="item" mode="sub"/>
</ul>
</div>
</div>
</xsl:template>

<xsl:template match="item">
<xsl:choose>
<xsl:when test="descendant::item[@id = $id]">
<li class="on" title="selected">
<a>
<xsl:attribute name="href"><xsl:value-of select="@link" />?id=<xsl:value-of select="@id" /></xsl:attribute>
<strong><em><xsl:value-of select="@name" /></em></strong>
</a>
</li>
</xsl:when>
<xsl:otherwise>
<li>
<a>
<xsl:attribute name="href"><xsl:value-of select="@link" />?id=<xsl:value-of select="@id" /></xsl:attribute>
<em><xsl:value-of select="@name" /></em>
</a>
</li>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

<xsl:template match="item[@id = $id]">
<li class="on" title="selected">
<a>
<xsl:attribute name="href"><xsl:value-of select="@link" />?id=<xsl:value-of select="@id" /></xsl:attribute>
<strong><em><xsl:value-of select="@name" /></em></strong>
</a>
</li>
</xsl:template>

<xsl:template match="item" mode="sub">
<xsl:if test="descendant::item[@id = $id]">
<xsl:apply-templates select="menu/item" mode="subitem" />
</xsl:if>
</xsl:template>

<xsl:template match="item[@id = $id]" mode="sub">
<xsl:choose>
<xsl:when test="menu">
<xsl:apply-templates select="menu/item" mode="subitem" />
</xsl:when>
<xsl:otherwise>
<li class="first"> </li>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

<xsl:template match="item[@id = $id]" mode="subitem">
<li>
<xsl:attribute name="class">on<xsl:if test="position() = 1"> first</xsl:if></xsl:attribute>
<a>
<xsl:attribute name="href"><xsl:value-of select="@link" />?id=<xsl:value-of select="@id" /></xsl:attribute>
<strong><xsl:value-of select="@name" /></strong>
</a>
</li>
</xsl:template>

<xsl:template match="item" mode="subitem">
<li>
<xsl:attribute name="class"><xsl:if test="position() = 1">first</xsl:if></xsl:attribute>
<a>
<xsl:attribute name="href"><xsl:value-of select="@link" />?id=<xsl:value-of select="@id" /></xsl:attribute>
<xsl:value-of select="@name" />
</a>
</li>
</xsl:template>


</xsl:stylesheet>

menu.xml

<menu>
<item id="1" name="Company" link="company.html">
<menu>
<item id="11" name="Employee" link="employee.html" />
<item id="12" name="HR" link="hr.html" />
<item id="13" name="TL" link="tl.html" />
<item id="14" name="PM" link="pm.html" />
</menu>
</item>
<item id="2" name="College" link="college.html" >
<menu>
<item id="21" name="Student" link="collegestud.html" />
<item id="22" name="Lecturer" link="collegelect.html" />
<item id="23" name="Principal" link="collegeprin.html" />
</menu>
</item>
<item id="3" name="CricketTeam" link="cricket.html">
<menu>
<item id="31" name="Player" link="cricketplayer.html" />
<item id="32" name="Captain" link="cricketcap.html" />
<item id="33" name="Team Manager" link="crickettm.html" />
</menu>
</item>
</menu>

menu.css
/* primary tabs */
.navset {border-bottom:1px solid #999;}
.navset h3, .navset h4 {position:absolute;left:-1000em;margin:0;}
.navset .hd li em {font-weight:bold;}
.navset .hd li a {color:#666;}
.navset .hd li.on strong, .navset .hd li.on strong a {color:#999;} /* selected tab */
.navset .hd li.on strong {background-color:#F2F3F5;border-bottom:1px solid #F2F3F5;} /* border-color should match selected color */

/* bg images, defaults to #999 border-color on white bg */
.navset .hd li a, .navset .hd li strong {background:#ccc url(../images/tr_999.gif) no-repeat top right;}
.navset .hd li em {background:transparent url(../images/tl_999.gif) no-repeat;}

/* secondary tabs */
.navset .bd ul {background-color:#F2F3F5;border-color:#999;}
.navset .bd li, .navset .bd li a {color:#06c;}
.navset li.on, .navset li.on strong {font-weight:bold;}
.navset .bd li {border-color:#ccc;} /* pipe divider */
/* end base styles */



/* shared pri and sec */
.navset {width:100%;} /* IE: width */
.navset a {text-decoration:none;}
.navset ul, .navset li {margin:0;padding:0;list-style:none;}
.navset li {float:left;display:inline;}
.navset li a:hover {text-decoration:underline;}
.navset ul:after {clear:both;content:'.';display:block;height:0;visibility:hidden;} /* clear non-IE */
.navset ul {zoom:1;} /* clear IE */

/* primary tabs */
.navset .hd ul {font:bold 78%/1.2em verdana;margin-bottom:-1px;padding-left:.3em;position:relative;} /* IE quirks mode: relative */
.navset .hd li {margin-right:.33em;padding:0;}
.navset .hd li.on strong a {cursor:default;}
.navset .hd li a, .navset .hd li strong, .navset .hd li em {display:block;}
.navset .hd li a, .navset .hd li strong {*display:inline-block;} /* IE: 100% clickable */
.navset .hd li em {font-style:normal;padding:.5em .6em;}

/* secondary tabs */
.navset .bd ul {border-top-width:1px;border-top-style:solid;font:78%/1.2em verdana;margin:0;padding:.6em 0 .6em .4em;}
.navset .bd li {border-left-style:solid;border-left-width:1px;display:inline;padding:0 1em;}
.navset .bd li.first {padding-left:0;border:0;}

dispatcher-servlet.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>

<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/company.html">indexController</prop>
<prop key="/college.html">indexController</prop>
<prop key="/cricket.html">indexController</prop>
<prop key="/employee.html">indexController</prop>
<prop key="/hr.html">indexController</prop>
<prop key="/tl.html">indexController</prop>
<prop key="/pm.html">indexController</prop>
<prop key="/cricketcap.html">indexController</prop>
<prop key="/crickettm.html">indexController</prop>
<prop key="/cricketplayer.html">indexController</prop>
<prop key="/collegestud.html">indexController</prop>
<prop key="/collegelect.html">indexController</prop>
<prop key="/collegeprin.html">indexController</prop>
</props>
</property>
</bean>

<bean name="indexController" class="com.indexController">
<property name="methodNameResolver" ref="methodNameResolver"/>
</bean>

<bean name="methodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver"/>


</beans>

index.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:redirect url="/company.html" />

main.jsp

<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="stylesheet" href="menu/menu.css" type="text/css" />
<title><decorator:title default="Nested Menus" /></title>
<decorator:head />
</head>
<body>
<c:import url="menu/menu.xml" var="xml"/>
<c:import url="menu/menu.xsl" var="xsl"/>
<x:transform xml="${xml}" xslt="${xsl}">
<x:param name="id"><c:out value='${param.id}' default="11" /></x:param>
</x:transform>

<decorator:body />
</body>
</html>

college.jsp

<h2>College</h2>

crickettm.jsp

<h2>Cricket Team</h2>
<br/>
<h3>Team Manager</h3>

cricketcap.jsp

<h2>Cricket Team</h2>
<br/>
<h3>Captain</h3>

Remaining jsps also like above jsps - cricket.jsp , tl.jsp , company.jsp , collegestud.jsp , collegeprin.jsp , collegelect.jsp , cricketplayer.jsp , employee.jsp , hr.jsp , pm.jsp

No comments: