在项目中使用注解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、Spring和Hibernate是Java开发中非常重要的三个开源框架,它们各自负责应用程序的不同层面,协同工作可以构建出高效、可维护的Web应用。这里我们将深入探讨这三个框架以及它们的整合方式。 Struts是一个用于...
Spring、Struts和Hibernate是Java开发中非常经典的三大框架,它们各自在应用程序的不同层次上发挥作用,共同构建了一个强大的企业级应用开发解决方案。Spring是全面的轻量级应用框架,Struts是一个MVC(Model-View-...
1. **实体类(Entity)**:代表数据库中的表,通常会使用Hibernate的注解来声明与数据库的映射关系。 2. **Hibernate配置文件(hibernate.cfg.xml)**:配置数据库连接信息、方言等。 3. **SessionFactory**:负责...
Struts处理前端请求,将数据传递给Spring,由Spring管理的业务服务层处理逻辑,并通过Hibernate与数据库进行数据交互。Spring还可以作为全局事务管理器,确保在多层调用中事务的一致性。 本书《轻量级J2EE企业应用...
ActionForm 类用于在视图和控制器之间传递数据,而配置文件(struts-config.xml)定义了请求与Action的映射。 **Spring2.0** Spring 是一个全面的Java企业级应用开发框架,强调依赖注入(Dependency Injection, DI...
它帮助组织应用程序的结构,处理HTTP请求,并将数据传递给视图层。 "Ajax学习笔记"涵盖了异步JavaScript和XML技术,使网页可以实现局部刷新,提高用户体验。虽然现代Web开发中更多的使用了Fetch API和JSON,但了解...
Struts2通过Action类处理请求,这些Action类与业务逻辑交互,然后将结果传递给视图进行展示。此外,它还支持拦截器,可以实现AOP(面向切面编程)功能,如日志、事务管理和权限控制。 **Spring2.0** 是一个全面的...
SSH框架,全称为Spring、SpringMVC和Hibernate,是Java Web开发中常用的一套集成解决方案。这三大框架分别负责不同的职责,Spring作为基础容器管理应用对象,SpringMVC处理Web层的请求与响应,而Hibernate则专注于...
8. **Spring Integration**:这是一个企业级的集成框架,用于处理系统间的异步通信和消息传递。它可以与各种消息中间件(如RabbitMQ、ActiveMQ)协同工作,实现服务间的解耦。 9. **Spring Test**:Spring提供了...
7. **消息传递**:Spring还支持企业级的消息传递,如JMS(Java Message Service),相关接口和类位于`org.springframework.jms`包下。 8. **国际化**:Spring通过`ResourceBundleMessageSource`类支持国际化和本地...
在SSH架构中,Spring作为核心容器,管理Struts和Hibernate中的bean,同时处理依赖注入和事务管理。Struts作为前端控制器,接收并处理用户请求,然后调用Spring管理的业务服务,这些服务又通过Hibernate与数据库进行...
- **应用程序服务器**: 除了提供HTTP服务之外,还提供了更多的企业级服务,如EJB容器、事务管理、消息传递等。常见的应用程序服务器有BEA WebLogic、IBM WebSphere、JBoss等。 - **Tomcat**: Tomcat是一款开源的应用...
Struts、Hibernate和Spring是Java开发中非常重要的三个框架,它们各自解决了一部分软件开发中的问题,而将它们集成在一起可以构建出强大的企业级应用。本文将深入探讨这三个框架的核心功能,以及它们如何协同工作。 ...
`@ModelAttribute`注解可以用来绑定请求参数到方法参数,或者把方法返回的对象添加到模型中。 5. **Service层**:业务逻辑处理层,通常与DAO层(数据访问对象)一起工作,负责处理业务逻辑。在SpringMVC中,服务类...
SSH架构,全称为Struts+Spring+Hibernate,是Java Web开发中的一个经典组合,用于构建高效、可扩展的Web应用程序。这个实例展示了SSH框架如何协同工作,实现一个基础的用户登录系统,包括用户注册、登录、信息修改和...
在这个场景中,我们看到的标签包括“简单”、“Struts2”、“Hibernate”和“Spring”,这些都是Java Web开发中的核心框架。下面我们将深入探讨这些技术及其在构建登录、下载、文件上传和修改资料等基本功能中的应用...
Struts作为MVC架构的一种实现,负责处理用户请求并将数据传递给视图层显示;而Hibernate则是一个ORM(对象关系映射)框架,用于将数据库表与Java对象进行映射。 本文将通过一个简单的实例来介绍如何整合SSH框架,并...
SSH(Struts、Spring、Hibernate)是Java Web开发中的三个重要框架,它们组合在一起可以构建出高效、松耦合的Web应用程序。以下是这三个框架的基本概念、功能以及它们如何协同工作的详细解释。 **Struts框架** ...
- **控制器(Controller)**:处理用户请求,调用业务逻辑(可能封装在服务层),并准备数据传递给视图。Spring.NET的DI可以帮助控制器获得所需的服务实例。 - **服务层(Service Layer)**:包含了业务逻辑,可能...
- **ModelAndView**:封装模型数据和视图信息,用于从Controller传递数据到视图。 4. **Spring JDBC**与**事务管理**: - **JdbcTemplate**和**NamedParameterJdbcTemplate**:简化SQL操作,提供模板方法,避免...