`
jhyimu2005
  • 浏览: 186068 次
  • 性别: Icon_minigender_2
  • 来自: 苏州
社区版块
存档分类
最新评论

Sping,Hibernate中跨请求传递消息

阅读更多
在项目中使用注解url进行访问事用到了redirect,结果发现其信息就丢失了,其解决方案如下:

package com.founder.bcimp.core.filter;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.context.support.DelegatingMessageSource;
import org.springframework.web.servlet.support.RequestContextUtils;

public final class FlashScope {
	
	static final String FLASH_SCOPE_ATTRIBUTE = FlashScope.class.getName();
	
	@SuppressWarnings("unchecked")
	public static Map<String, Object> getCurrent(HttpServletRequest request) {
		HttpSession session = request.getSession(); 
		Map flash = (Map) session.getAttribute(FLASH_SCOPE_ATTRIBUTE);
		if (flash == null) {
			flash = new HashMap();
			session.setAttribute(FLASH_SCOPE_ATTRIBUTE, flash);
		}
		return flash;
	}
	
	private FlashScope() {
	}
	
	/**
	 * Gets the international message
	 * 
	 * @param request HttpServletRequest
	 * @param messageSource DelegatingMessageSource
	 * @param key String
	 * @return the international message
	 * @author Jiang Haiying
	 */
	private static String getLocalMessage(HttpServletRequest request, DelegatingMessageSource messageSource, String key) {
		
		String message = messageSource.getMessage(key, null, RequestContextUtils.getLocale(request));
		return message;
	}

	/**
	 * Gets the international message
	 * 
	 * @param request HttpServletRequest
	 * @param messageSource DelegatingMessageSource
	 * @param key String
	 * @author Jiang Haiying
	 */
	public static void internationalMessage(HttpServletRequest request, DelegatingMessageSource messageSource, String message) {
		FlashScope.getCurrent(request).put("message", getLocalMessage(request, messageSource, message));
	}
	
}

package com.founder.bcimp.core.filter;

import java.io.IOException;
import java.util.Map;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.filter.OncePerRequestFilter;

public class FlashScopeFilter extends OncePerRequestFilter {

	@Override
	@SuppressWarnings("unchecked")
	protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
		throws ServletException, IOException {
		HttpSession session = request.getSession(false);
		if (session != null) {
			Map<String, ?> flash = (Map<String, ?>) session.getAttribute(FlashScope.FLASH_SCOPE_ATTRIBUTE);
			if (flash != null) {
				for (Map.Entry<String, ?> entry : flash.entrySet()) {
					Object currentValue = request.getAttribute(entry.getKey());
					if (currentValue == null) {
						request.setAttribute(entry.getKey(), entry.getValue());
					}					
				}
				session.removeAttribute(FlashScope.FLASH_SCOPE_ATTRIBUTE);
			}
		}
		filterChain.doFilter(request, response);
	}
}



其使用案例如下:
@RequestMapping(value = "/register", method = RequestMethod.POST)
	public String register(CRSCompound compound, Integer compoundSaltId, Integer notebookId,
			Integer unitsId, Integer projectId, Integer submitterId, Integer saltCoeff,
			Integer appearanceId, HttpServletRequest request, ModelMap model){
		
		String forward = "redirect:/crs/compound/";
		String message = "bcimp.save.success.message";
		
		if (compound.getId() != null) {
			message = "bcimp.edit.success.message";
		}
		
		try {
			
			
			if(compoundService.registerCompound(compound) == null && compound.getId() == null) {
				message = "bcimp.save.failure.message";
			}
			if(compoundService.registerCompound(compound) == null && compound.getId() != null) {
				message = "bcimp.edit.failure.message";
			}
			
		} catch (LogicException e) {
			logger.error(e.getMessage(), e);
		}
		if (compound.getId() != null) {
			forward = forward + compound.getId();
		} else {
			//TODO
			//registration failed
		}

		FlashScope.internationalMessage(request, messageSource, message);
		return forward;
	}
分享到:
评论

相关推荐

    struts%sping%hibernate三个框架的整合jar文件

    Struts、Spring和Hibernate是Java开发中非常重要的三个开源框架,它们各自负责应用程序的不同层面,协同工作可以构建出高效、可维护的Web应用。这里我们将深入探讨这三个框架以及它们的整合方式。 Struts是一个用于...

    Sping +struts + hibernate 源码

    Spring、Struts和Hibernate是Java开发中非常经典的三大框架,它们各自在应用程序的不同层次上发挥作用,共同构建了一个强大的企业级应用开发解决方案。Spring是全面的轻量级应用框架,Struts是一个MVC(Model-View-...

    SpringMVC3+Sping+Hibernate3Demo

    1. **实体类(Entity)**:代表数据库中的表,通常会使用Hibernate的注解来声明与数据库的映射关系。 2. **Hibernate配置文件(hibernate.cfg.xml)**:配置数据库连接信息、方言等。 3. **SessionFactory**:负责...

    《轻量级J2EE企业应用实践-tructs+sping+hibernate整合开发》10

    Struts处理前端请求,将数据传递给Spring,由Spring管理的业务服务层处理逻辑,并通过Hibernate与数据库进行数据交互。Spring还可以作为全局事务管理器,确保在多层调用中事务的一致性。 本书《轻量级J2EE企业应用...

    Struts1.x+sping2.0+hibernate3.0

    ActionForm 类用于在视图和控制器之间传递数据,而配置文件(struts-config.xml)定义了请求与Action的映射。 **Spring2.0** Spring 是一个全面的Java企业级应用开发框架,强调依赖注入(Dependency Injection, DI...

    java unix sping ajax struts hibernate 学习笔记

    它帮助组织应用程序的结构,处理HTTP请求,并将数据传递给视图层。 "Ajax学习笔记"涵盖了异步JavaScript和XML技术,使网页可以实现局部刷新,提高用户体验。虽然现代Web开发中更多的使用了Fetch API和JSON,但了解...

    struts2+sping2.0+hibernate3.0源码

    Struts2通过Action类处理请求,这些Action类与业务逻辑交互,然后将结果传递给视图进行展示。此外,它还支持拦截器,可以实现AOP(面向切面编程)功能,如日志、事务管理和权限控制。 **Spring2.0** 是一个全面的...

    SSH框架实例(Sping,SpringMVC,Hibernate)

    SSH框架,全称为Spring、SpringMVC和Hibernate,是Java Web开发中常用的一套集成解决方案。这三大框架分别负责不同的职责,Spring作为基础容器管理应用对象,SpringMVC处理Web层的请求与响应,而Hibernate则专注于...

    sping的jar包

    8. **Spring Integration**:这是一个企业级的集成框架,用于处理系统间的异步通信和消息传递。它可以与各种消息中间件(如RabbitMQ、ActiveMQ)协同工作,实现服务间的解耦。 9. **Spring Test**:Spring提供了...

    Sping Api 4.1.3.chm

    7. **消息传递**:Spring还支持企业级的消息传递,如JMS(Java Message Service),相关接口和类位于`org.springframework.jms`包下。 8. **国际化**:Spring通过`ResourceBundleMessageSource`类支持国际化和本地...

    j2ee注解(struts+sping+hibenate)

    在SSH架构中,Spring作为核心容器,管理Struts和Hibernate中的bean,同时处理依赖注入和事务管理。Struts作为前端控制器,接收并处理用户请求,然后调用Spring管理的业务服务,这些服务又通过Hibernate与数据库进行...

    javaee三大框架SSH(spring,hibernate,struts)学习

    - **应用程序服务器**: 除了提供HTTP服务之外,还提供了更多的企业级服务,如EJB容器、事务管理、消息传递等。常见的应用程序服务器有BEA WebLogic、IBM WebSphere、JBoss等。 - **Tomcat**: Tomcat是一款开源的应用...

    Struts+Hibrenate+Sping框架综合运用

    Struts、Hibernate和Spring是Java开发中非常重要的三个框架,它们各自解决了一部分软件开发中的问题,而将它们集成在一起可以构建出强大的企业级应用。本文将深入探讨这三个框架的核心功能,以及它们如何协同工作。 ...

    SpingMVC基础代码

    `@ModelAttribute`注解可以用来绑定请求参数到方法参数,或者把方法返回的对象添加到模型中。 5. **Service层**:业务逻辑处理层,通常与DAO层(数据访问对象)一起工作,负责处理业务逻辑。在SpringMVC中,服务类...

    SSH架构实例:简单的用户登录,增删改显功能

    SSH架构,全称为Struts+Spring+Hibernate,是Java Web开发中的一个经典组合,用于构建高效、可扩展的Web应用程序。这个实例展示了SSH框架如何协同工作,实现一个基础的用户登录系统,包括用户注册、登录、信息修改和...

    简单的web应用开发

    在这个场景中,我们看到的标签包括“简单”、“Struts2”、“Hibernate”和“Spring”,这些都是Java Web开发中的核心框架。下面我们将深入探讨这些技术及其在构建登录、下载、文件上传和修改资料等基本功能中的应用...

    ssh整合小实例学习

    Struts作为MVC架构的一种实现,负责处理用户请求并将数据传递给视图层显示;而Hibernate则是一个ORM(对象关系映射)框架,用于将数据库表与Java对象进行映射。 本文将通过一个简单的实例来介绍如何整合SSH框架,并...

    ssh集合的例子

    SSH(Struts、Spring、Hibernate)是Java Web开发中的三个重要框架,它们组合在一起可以构建出高效、松耦合的Web应用程序。以下是这三个框架的基本概念、功能以及它们如何协同工作的详细解释。 **Struts框架** ...

    mvc4+spring.net+nhibernate小例子

    - **控制器(Controller)**:处理用户请求,调用业务逻辑(可能封装在服务层),并准备数据传递给视图。Spring.NET的DI可以帮助控制器获得所需的服务实例。 - **服务层(Service Layer)**:包含了业务逻辑,可能...

    Sping-textbook:根据JavaEE课本做笔记时写的代码

    - **ModelAndView**:封装模型数据和视图信息,用于从Controller传递数据到视图。 4. **Spring JDBC**与**事务管理**: - **JdbcTemplate**和**NamedParameterJdbcTemplate**:简化SQL操作,提供模板方法,避免...

Global site tag (gtag.js) - Google Analytics