`
famoushz
  • 浏览: 2951459 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

基于Spring Portlet MVC的CRUD

阅读更多

Spring 2.0开始对JSR168 Portlet支持,其的MVC模式区别于WW/Struts2,重要的区别就是WW/Struts2对portlet的封装是统一于Servlet的封装,即把Portlet的RequestRender和RequestAction的生命周期封装为RequestAction,而Spring Portlet MVC保留了这特性。Spring Portlet MVC的模式与Spring MVC一样,但是是对Portlet重新开发,故应用Spring Portlet MVC与Spring MVC是一样的,具体注入的类不一样。

            在这篇文章中,我会结合Spring和Hibernate开发实现一个基于联系人(Contact)数据对象的增、删、改功能;由于这篇文章重点讲述的是Portlet MVC,对于Spring+Hibernate的配置内容不作重点,请读者参考相关资料。这里只是个简单的例子,在实际应用中,还要读者根据实际情况自行修改适应实际的应用。由于在我上一篇文章中已经讲述过如何开发部署简单的Spring Portlet MVC的例子,在这里只讲述一些重要的细节,其余内容的请参考文章后面的例子原码。

  数据模型
  联系人Contact.,它包括名字,邮件地址等信息,如下所示: Contact.java public class Contact extends BaseEntity{ private String firstName; private String lastName; private String email; private String phoneNumber; …... 这个Contact对象是继承了BaseEntity,它是封装所有数据模型的唯一标识id的抽象类,把id抽象出来作为重用元素。 BaseEntity.java public abstract class BaseEntity implements IdEntity { private String contactId; ……. 如上所示,它实现一个通用的id存取接口。
 
 DAO层操作
 DAO层的接口,它负责数据对象的增删改的功能实现。
接口代码如下:
IStorage.java public interface IStorage {
 //增加
IdEntity doCreateEntity( IdEntity object );
//修改
IdEntity doUpdateEntity( IdEntity object );
//删除
void doDeleteEntity( IdEntity id );
//凭ID找数据对象
Object doFindEntityById( Class clazz, IdEntity object );
//找出某个数据对象的实体
Collection doFindAllEntities( Class clazz );
从上面可以看到这个接口是基于数据对象的增删改功能,其的实际类SpringStorage.java是应用Spring封装的Hiberante的操作接口来实现,详细内容请参考源码。

服务层接口
服务层接口是Spring层(业务接口)的实现。接口类IContactService代码如下,它是DAO操作的延伸,接口的实现详见例子。
public interface IContactService {

Contact createContact( Contact contact );

Contact updateContact( Contact contact );

void deleteContact( Contact contact );

Contact findContactById( IdEntity object );

List findAllContacts(); }

Portlet层
Portlet层的代码简单,但是理清增删改的逻辑非常重要。

1) 显示列表SelectController.java
显示列表,是通过服务接口取出所有数据,再跟跳转到页面上显示;跳转到显示页面是由返回ModelAndView对象控制到达哪个页面。

SelectController.java
public class SelectController implements Controller{

private static Log log = LogFactory.getLog(SelectController.class);

private IContactService contactService;

public void setContactService(IContactService contactService)

{ this.contactService = contactService; }

public IContactService getContactService() {

return contactService;

}

显示列表Portlet Action实现org.springframework.web.portlet.mvc.Controller接口,在Servlet支持也有相应的接口。上面的代码只是设置IoC容器注入服务类。

public ModelAndView handleRenderRequest(RenderRequest renderRequest,
                                                                                  RenderResponse response) throws Exception {
ModelAndView modelAndView = new ModelAndView("list");
modelAndView.addObject("contactList", contactService.findAllContacts());
return modelAndView;
}
上面代码是从服务接口取出所有数据,再跳转到list.jsp页面。 在list.jsp里取得相应的数据信息显示,这个和Sping MVC是完全一致,但是在显示页面了,有三个跳转:增加跳转,修改跳转,删除跳转。

增加跳转页面代码:
<a href='<portlet:renderURL>
        <portlet:param name="action" value="insert"/>
  </portlet:renderURL>'>Add Contact</a>
上面代码说明这个链接是跳view里面的action为insert,这个action的跳转在配置里定义,这里跳转到增加数据的页面。

修改跳转页面代码:
<a href='<portlet:renderURL>
        <portlet:param name="action" value="update"/>
        <portlet:param name="contactId">
         <jsp:attribute name="value">
          <c:out value="${contact.contactId}"/>
         </jsp:attribute>
        </portlet:param> 
       </portlet:renderURL>
  '><c:out value="${contact.contactId}"/></a>
上面代码是说明根据对象的id作为参数跳转到修改的控制器,这里注意的是应用<jsp:attribute>标记来传递参数,而不是servlet的直接追加参数,portlet里的URL和参数是经过编码处理的。

删除跳转页面代码:
<a href='<portlet:actionURL>
<portlet:param name="action" value="delete"/>
<portlet:param name="contactId">
 <jsp:attribute name="value">
  <c:out value="${contact.contactId}"/>
 </jsp:attribute>
</portlet:param> 
</portlet:actionURL>
'>Remove</a>
是通过传入数据对象的id跳转到删除对象的控制器。

页面效果如下:



2)增加联系人InsertController.java
增加数据是过程:当控制器接到renderrequest时,控制器会跳转到form页面,这个页面会在配置文件里作配置;当控制器接到renderaction时,则会调用服务接口作保存操作。

跳转到form的配置:
<bean id="insertController" class="com.yds.portal.portlet.InsertController">
  <property name="contactService" ref="contactService"></property>
  <property name="commandName" value="contact"/>
  <property name="commandClass" value="com.gdcn.portal.contact.model.Contact" />
  <property name="formView" value="insert"></property>
  <property name="successView" value="list"></property>
</bean>
这是增加控制器的配置,其中formView属性就是说明跳转到form页面insert.jsp,而successView是requestaction成功处理后的跳转。

增加保存的代码:
protected void onSubmitAction(ActionRequest request, ActionResponse response, Object command, BindException errors) throws Exception {
  
  Contact contact =(Contact)command;
  contactService.createContact(contact);
  response.setRenderParameter("action", "list");
  
 }
当form页面提交后,通过command对象取得页面的对象,从而保存。上面的onSubmitAction方面是监听页面的form的submit操作,如果要作具体的那个submit(页面有保存和取消按钮),则可以重写方法。效果图如下:



3) 修改联系人UpdateController.java
修改与增加一样有两个操作,跳转到form页面和作更的保存操作。保存操作和增加的一样不作介绍,这里只说明下跳转到form页面。跳转到form页面前则要得到要修改的目标对象,通过取得页面传过来的参数,调用服务方法获取目标对象,再跳转到form页面。从列表跳转到修改页面作取得数据对象的代码如下:
protected Object formBackingObject(PortletRequest request) throws Exception {
  
  Contact updateContact =(Contact)super.formBackingObject(request);
  if(updateContact.getContactId() == null){
   String contactId = request.getParameter("contactId");
   updateContact.setContactId(contactId);
   updateContact = contactService.findContactById(updateContact);
  }
  
  return updateContact;
 }
效果图如下:

修改后跳转显示页面:
 


4)删除联系人DeleteController.java
删除只是简单的接收到要删除对象的id,调用服务取得对象,再作删除操作。这里过程的细节在上面已经有所述。其效果如下:



Spring Portlet项目的配置

在项目中spring的配置在两个地方读入,一是servlet容器时,即web.xml;另一个是配置portlet.xml里。
  在Servlet容器里读取时,设置把spring对portlet的全部配置,服务器设置,Hibernate层设置等等信息读入到servlet容器。
Web.xml中
context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/springconfig/applicationContext*.xml</param-value>
</context-param>
设置读取/WEB-INF/springconfig/目录下,以applicationContext开头的xml配置文件,在这个项目里有:
applicationContext.xml           全局的配置信息
applicationContext-Services.xml    服务层的配置信息
applicationContext-hibernate.xml   Hibernate的配置信息

在applicationContext.xml里设置jsp页面的目录和view的一些信息;applicationContext-Services.xml是配置服务类的信息;applicationContext-hibernate.xml是配置事务,DAO,数据库配置等等信息。
  在portlet.xml中,是配置portlet项目的控制器信息:
<portlet-class>org.springframework.web.portlet.DispatcherPortlet</portlet-class>
  <init-param>
         <name>contextConfigLocation</name>
         <value>/WEB-INF/springconfig/contact-portlet.xml</value>
 </init-param>
在当前的portlet中读取contact-portlet.xml配置,这是一个portlet的配置,项目中配置多个portlet时,可以配置多个。
Contact-portlet.xml中配置各个控制器和模式:
<bean id="selectController" …        列表控制器
<bean id="insertController"…         插入控制器
<bean id="updateController" …        修改控制器
<bean id="deleteController"….         删除控制器

<bean id="portletModeParameterHandlerMapping"…  在view模式中配置各个控制器,前面的key为视图标识。

<bean id="portletModeHandlerMapping"…           porttlet的模式映射可以配置view,edit,help等各种模式的控制器。


综上所述,说明了基于spring portlet mvc的crud例子构建,上面对外WEB三层的概要,代码作了说明,也对portlet项目的配置作了介绍。关于spring在portlet的应用还有很多细节,读者在实际应用中获得更多的经验,这里只作下介绍,希望有利于各位应用到实际项目中去。

以下是本例子的项目及源码:

SpringInfrastructurePortlet.part1.rar(977 KB)
SpringInfrastructurePortlet.part2.rar(977 KB)
SpringInfrastructurePortlet.part3.rar(977 KB)
SpringInfrastructurePortlet.part4.rar(977 KB)
SpringInfrastructurePortlet.part5.rar(977 KB)
SpringInfrastructurePortlet.part6.rar(977 KB)
SpringInfrastructurePortlet.part7.rar(749 KB)

分享到:
评论

相关推荐

    Struts2 + Pluto + portletV1.0(JSR 168) CRUD Demo

    Struts2 + Pluto + portletV1.0 (JSR 168) CRUD Demo 是一个基于Java Web的示例项目,它展示了如何利用Struts2框架与Pluto Portlet容器来实现portlet V1.0(遵循JSR 168规范)的创建、读取、更新和删除(CRUD)操作...

    spring框架教程 PPT

    Web-MVC为构建基于HTTP的服务提供了模型-视图-控制器架构,Servlet和Portlet模块则是对标准Servlet API的扩展,WebSocket模块支持WebSocket协议的服务器端应用。 五、Spring Boot与Spring Cloud Spring Boot简化了...

    Spring攻略(第二版 中文高清版).part1

    14.1 用Spring Portlet MVC开发一个简单的Portlet 544 14.1.1 问题 544 14.1.2 解决方案 545 14.1.3 工作原理 546 14.2 将Portlet请求映射到处理程序 553 14.2.1 问题 553 14.2.2 解决方案 553 14.2.3...

    Spring PPT

    3. **Web**:包含 Web、Servlet、Struts 和 Portlet 模块,提供 MVC 框架和其他 web 相关功能。 4. **Spring AOP**:专门处理 AOP 功能的模块。 5. **Spring Aspects**:提供了与 AspectJ 的集成,增强了 AOP 功能。...

    maven liferay spring hibernate

    总结来说,"maven liferay spring hibernate"这个项目是一个基于Maven构建,利用Liferay作为门户,Spring MVC处理业务逻辑,Hibernate进行数据持久化的复杂Web应用。这样的架构组合既保证了开发效率,又提供了强大的...

    Spring架包

    7. **Spring Data**:这是一个用于简化数据访问的模块,支持多种数据存储技术,如JPA、MongoDB等,提供了CRUD操作的便捷接口。 8. **Spring Security**:提供了全面的安全管理解决方案,包括认证、授权等,确保应用...

    Spring攻略(第二版 中文高清版).part2

    14.1 用Spring Portlet MVC开发一个简单的Portlet 544 14.1.1 问题 544 14.1.2 解决方案 545 14.1.3 工作原理 546 14.2 将Portlet请求映射到处理程序 553 14.2.1 问题 553 14.2.2 解决方案 553 14.2.3...

    spring相关复习

    - Spring Data提供了一种简单的方式来与各种数据存储进行交互,如JPA、MongoDB、Redis等,支持CRUD操作和复杂查询。 6. **Spring Security** - 是一个强大的安全框架,用于保护Spring应用。它提供身份验证、授权...

    spring-hibernate-dwr实例

    webmvc.jar spring-portlet.jar struts.jar commons-fileupload.jar commons-httpclient.jar freemarker.jar jasperreports-1.3.3.jar commons-io.jar portlet-api.jar jxl.jar itext...

    liferay + struts2 + spring + ibatis整合开发案例

    **Struts2** 是一个基于MVC设计模式的Java Web框架,主要用于处理HTTP请求和控制应用程序流程。Struts2通过Action类处理请求,与视图层(如JSP)交互,并利用拦截器(Interceptor)机制实现业务逻辑和数据验证。在...

    struts2.1+hibernate3.1+spring2.0项目(增删改查)

    1. **Struts2.1**:Struts2是基于MVC(模型-视图-控制器)设计模式的Java Web应用框架,用于简化开发并提供更好的控制结构。Struts2.1版本引入了更多改进,如更强大的拦截器(Interceptor)、更灵活的配置选项以及对...

    hibernate中文API,以及liferay的API,已经struts和spring的文档

    Struts是基于MVC设计模式的Web框架,`struts2.0中文教程.chm`提供了Struts2的中文教程,涵盖了Action、拦截器、结果类型、国际化等关键概念,对于构建基于Struts的Web应用程序十分实用。 最后,Liferay API文档,`...

    ssm搭建20191118.docx

    通过Spring的注解配置,可以轻松地将Service层方法与Mapper接口关联,实现数据的CRUD操作。 综上所述,SSM(Spring、SpringMVC、MyBatis)是一个常见的Java web开发框架组合,它们各自负责应用的不同层面,协同工作...

    JavaSSH.pdf

    Spring提供了多种功能,包括但不限于事务管理、数据访问集成、MVC框架、AOP、JSF、portlet支持以及测试工具等。 1. Hibernate Hibernate是一个流行的Java ORM(对象关系映射)框架,它允许开发者以面向对象的方式...

    spring3x.rar_JavaScript/JQuery_Java_

    - **Spring MVC REST**:Spring MVC可以构建RESTful API,配合jQuery的$.ajax方法,实现客户端的CRUD操作。 4. **实际项目应用** - **依赖管理**:Spring的IoC容器负责管理应用对象的生命周期和依赖关系,简化了...

    Spring回顾

    - **Web**:Web、Web-Servlet和Web-Portlet模块支持基于Servlet的Web应用开发。 - **AOP**:提供面向切面编程的支持,实现跨功能的关注点。 - **Asynchronous Processing**:如Task和WebSocket模块,支持异步处理...

    struts2 info

    Struts2是一个基于MVC(Model-View-Controller)设计模式的开源JavaEE框架,它主要用来构建企业级Web应用程序。Struts2的核心是Action,它处理来自客户端的请求,并与业务逻辑进行交互,最终将结果传递给视图进行...

Global site tag (gtag.js) - Google Analytics