- Start with the struts-blank application
- Create the search.jsp file
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<%@ taglib uri="http://displaytag.sf.net" prefix="display"%>
<%@ page import="beans.Employee,business.Sorter,java.util.List,org.displaytag.tags.TableTagParameters,org.displaytag.util.ParamEncoder"%>
<html:html>
<head>
<title>Search page</title>
<link rel="stylesheet" type="text/css"
href="/StrutsPaging/css/screen.css" />
</head>
<body bgcolor="white">
<html:form action="/search.do">
<table>
<tr>
<td>Minimum Salary:</td>
<td><html:text property="minSalary"></html:text></td>
</tr>
<tr>
<td colspan="2"><html:submit property="submit" /></td>
</tr>
</table>
</html:form>
<logic:notEqual name="empList" value="null">
<jsp:scriptlet>
if (session.getAttribute("empList") != null) {
String sortBy = request.getParameter((new ParamEncoder("empTable")).encodeParameterName(TableTagParameters.PARAMETER_SORT));
Sorter.sort((List) session.getAttribute("empList"), sortBy);
}
</jsp:scriptlet>
<display:table name="sessionScope.empList" pagesize="4" id="empTable" sort="external" defaultsort="1" defaultorder="ascending" requestURI="">
<display:column property="empId" title="ID" sortable="true" sortName="empId" headerClass="sortable" />
<display:column property="empName" title="Name" sortName="empName" sortable="true" headerClass="sortable" />
<display:column property="empJob" title="Job" sortable="true" sortName="empJob" headerClass="sortable" />
<display:column property="empSal" title="Salary" sortable="true" headerClass="sortable" sortName="empSal" />
</display:table>
</logic:notEqual>
</body>
</html:html>pages/search.jsp - Create the Action class:
public class SearchAction extends Action {
private BusinessInterface businessInterface;
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse httpservletresponse) throws Exception {
if (form == null) {
return mapping.findForward("success");
}
try {
SearchForm searchForm = (SearchForm) form;
if (searchForm.getMinSalary() == null || searchForm.getMinSalary().equals("")) {
return mapping.findForward("success");
}
long minSal = Long.parseLong(searchForm.getMinSalary());
System.out.println("Business Interface: " + businessInterface);
List data = businessInterface.getData(minSal);
System.out.println("Data : " + data);
request.getSession().setAttribute("empList", data);
} catch (Exception e) {
e.printStackTrace();
}
return mapping.findForward("success");
}
public void setBusinessInterface(BusinessInterface bi) {
businessInterface = bi;
}
}SearchAction.java
Note that the action class has a property businessInterface. This property will be set by spring when loading the action class. - Define the form and action beans in struts-config.xml
<form-beans>
Note that, in the action-mapping, the action type is defined as "org.springframework.web.struts.DelegatingActionProxy". This will ensure that Spring will take care of handling struts actions.
<form-bean name="searchForm" type="forms.SearchForm" />
</form-beans>
<action-mappings>
<action path="/Welcome" forward="/pages/Welcome.jsp" />
<action name="searchForm" path="/search" scope="session" type="org.springframework.web.struts.DelegatingActionProxy">
<forward name="success" path="/pages/search.jsp"></forward>
</action>
</action-mappings> - Integrate Struts And Spring: The final step of integration is to add a spring plugin to struts-config.xml. The plugin defines the location of the spring bean-factory definitions.
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
This is one way of integrating struts and spring, for other ways of integration, refer to : Get a better handle on Struts actions, with Spring
<set-property property="contextConfigLocation"
value="/WEB-INF/applicationContext.xml"/>
</plug-in>
Tuesday, December 05, 2006
Data Access with Spring and Struts: Part 1
The struts pagination post contained an example of using Hibernate for data access too. In this post, I use the same example to implement the same pagination example using Spring. In this part we will see how to get a struts application ready for spring, the next part describes how to implement data access in spring. Follow these steps to run the example.
Labels:
example/sample code,
persistence,
spring,
struts
Subscribe to:
Post Comments (Atom)
Popular Posts
-
This post will describe how to create and deploy a Java Web Application war to Heroku using Heroku CLI. You will need a basic understanding ...
-
JUnit 4 introduces a completely different API to the older versions. JUnit 4 uses Java 5 annotations to describe tests instead of using in...
-
In a previous post, I described how to use Quartz scheduler for scheduling . In this post, I describe the configuration changes required for...
-
In the past, I had a few posts on how to implement pagination using displaytag( 1 , 2 ). That solution is feasible only with small result se...
-
The previous post described the Strategy pattern in brief. I listed out where and why the strategy pattern may be used. This post describes...
-
Acegi Security provides a comprehensive security solution for J2EE-based enterprise software applications, built using the Spring Framework...
-
The previous post described how to implement a JMS messaging client using Spring JMS . This post will describe how to implement the Message ...
-
This is an example code for a simple PDF merge using iText 5. We use three InputStream s in a List as input and merged file is written to th...
-
Direct Web Remoting (DWR) , is an open source Java library that can be used to implement Ajax in Java web applications with minimal Javascri...
-
New posts with iText 5.5.12 Following are two new posts for PDF Merge with iText 5.5.12 Merge PDF files using iText 5 Merge and Paginate PDF...
do you have any idea of integrating struts with spring 2... i mean is theare any proxy class for Spring2. The example you have given is for Spring 1.x
ReplyDeleteThis example was implemented on Spring 2.0.1.
ReplyDeleteHi, Im having some problems while trying to use Spring AOP with Struts Actions, and I wonder if you could help me?
ReplyDeleteIm using spring 2.0.4, and struts 1.3, I dont know if that makes any difference?
So my struts-config is something like this:
....
< action-mappings>
< action path="/prueba"
type="org.springframework.web.struts.DelegatingAct ionProxy"
scope="request" validate="false" parameter="cmd">
< /action>
< /action-mappings>
< plug-in className="org.springframework.web.struts.ContextL oaderPlugIn">
< set-property property="contextConfigLocation"
value="WEB-INF/classes/applicationContext.xml"/>
< /plug-in>
..
And my bean definition is:
....
< bean name="/prueba" scope="prototype" autowire="byName"
class="prueba.integracion.PruebaAction" />
< aop:aspectj-autoproxy proxy-target-class="true" />
...
The error Im getting is org.springframework.beans.factory.BeanNotOfRequire dTypeException, Bean named '/prueba' must be of type [org.apache.struts.action.Action], but was actually of type [$Proxy6]
Im a bit stuck with this, so Id appreciatte any help.
Thanks
Try in struts instead this:
ReplyDelete> action path="/prueba"
type="org.springframework.web.struts.DelegatingAct ionProxy"
scope="request" validate="false" parameter="cmd"<
something like this(without DelegatingAct ionProxy):
>action path="/edit" name="inputForm"
type="example.action.ViewAction" validate="false" scope="request"
parameter="op"<
>forward name="list" path="/jsp/index.jsp" /<
<forward name="add" path="/jsp/input.jsp" />
</action>
and add:
<controller>
<set-property property="processorClass"
value="org.springframework.web.struts.DelegatingRequestProcessor" />
</controller>
From the tons of comments on your articles, Thank you.
ReplyDeleteSo wonderful to discover somebody with some original thoughts on this topic.
ReplyDeleteWe actually installed a roof on one of their homes in Texas! Great guys.
ReplyDeleteAppreciating the time and effort you put into your site and detailed information you offer.
ReplyDeleteAs a marketing communications student, thank you!!
ReplyDeleteYour post is very interesting to me. Reading was so much fun.
ReplyDelete