AccountFormController 这个控制器在JpetStore中应该算是比较难的一个控制器,我把我的心得体会记录下来
希望对一同学习JpetStroe的人有些帮助
我下的是spring-framework-2.0.6中自带的 ,如果我有写错或理解错的地方,请大家提醒一下.
java 代码
- public class AccountFormController extends SimpleFormController {
- private Log log = LogFactory.getLog(AccountFormController.class);
-
- public static final String[] LANGUAGES = { "english", "japanese" };
-
- private PetStoreFacade petStore;
-
- public AccountFormController() {
- setSessionForm(true);
-
-
-
-
-
-
- setValidateOnBinding(false);
- setCommandName("accountForm");
-
-
- setFormView("EditAccountForm");
- log.info("**** AccountFormController()........\n");
-
- }
-
- public void setPetStore(PetStoreFacade petStore) {
- this.petStore = petStore;
- }
-
-
-
-
-
- protected Object formBackingObject(HttpServletRequest request)
- throws Exception {
- UserSession userSession = (UserSession) WebUtils.getSessionAttribute(
- request, "userSession");
- log.info("**** formBackingObject()........\n");
- if (userSession != null) {
- return new AccountForm(this.petStore.getAccount(userSession
- .getAccount().getUsername()));
- } else {
- return new AccountForm();
- }
- }
-
-
-
-
- protected void onBindAndValidate(HttpServletRequest request,
- Object command, BindException errors) throws Exception {
- log.info("**** onBindAndValidate()........\n");
-
- AccountForm accountForm = (AccountForm) command;
- Account account = accountForm.getAccount();
- if (request.getParameter("account.listOption") == null) {
- account.setListOption(false);
- }
- if (request.getParameter("account.bannerOption") == null) {
- account.setBannerOption(false);
- }
-
-
-
-
-
-
-
-
-
-
- errors.setNestedPath("account");
-
- getValidator().validate(account, errors);
-
-
- log.info("**** getValidator().validate(account, errors);........\n");
-
-
-
-
-
-
-
-
- errors.setNestedPath("");
-
- if (accountForm.isNewAccount()) {
- account.setStatus("OK");
- ValidationUtils.rejectIfEmpty(errors, "account.username","USER_ID_REQUIRED", "User ID is required.");
-
-
- log.info("**** after ValidationUtils.rejectIfEmpty(errors, \"account.username\",..) ........\n");
- errors.setNestedPath("");
- if (account.getPassword() == null
- || account.getPassword().length() < 1
- || !account.getPassword().equals(
- accountForm.getRepeatedPassword())) {
- errors.reject("PASSWORD_MISMATCH",
- "Passwords did not match or were not provided. Matching passwords are required.");
- }
- } else if (account.getPassword() != null
- && account.getPassword().length() > 0) {
- if (!account.getPassword().equals(accountForm.getRepeatedPassword())) {
- errors.reject("PASSWORD_MISMATCH",
- "Passwords did not match. Matching passwords are required.");
- }
- }
- }
-
-
-
-
- protected Map referenceData(HttpServletRequest request) throws Exception {
- log.info("**** referenceData()........\n");
- Map model = new HashMap();
- model.put("languages", LANGUAGES);
- model.put("categories", this.petStore.getCategoryList());
- return model;
- }
-
-
- protected ModelAndView onSubmit(HttpServletRequest request,
- HttpServletResponse response, Object command, BindException errors)
- throws Exception {
- log.info("**** onSubmit()........\n");
- AccountForm accountForm = (AccountForm) command;
-
- try {
- if (accountForm.isNewAccount()) {
- this.petStore.insertAccount(accountForm.getAccount());
- } else {
- this.petStore.updateAccount(accountForm.getAccount());
- }
- } catch (DataIntegrityViolationException ex) {
- errors.rejectValue("account.username", "USER_ID_ALREADY_EXISTS",
- "User ID already exists: choose a different ID.");
- return showForm(request, response, errors);
- }
-
- UserSession userSession = new UserSession(this.petStore
- .getAccount(accountForm.getAccount().getUsername()));
- PagedListHolder myList = new PagedListHolder(this.petStore
- .getProductListByCategory(accountForm.getAccount()
- .getFavouriteCategoryId()));
- myList.setPageSize(4);
- userSession.setMyList(myList);
- request.getSession().setAttribute("userSession", userSession);
- return super.onSubmit(request, response, command, errors);
- }
-
- }
分享到:
相关推荐
《Spring框架学习:以JpetStore为例》 Spring框架是Java企业级应用开发中的核心框架,它为开发者提供了丰富的功能,简化了开发流程,提高了代码的可测试性和可维护性。JpetStore作为Spring的经典示例项目,是学习...
在MyEclipse中加载和运行JPetStore,不仅可以帮助我们学习Spring框架的基本用法,还能让我们熟悉MyEclipse的项目管理和服务器部署。同时,通过对JPetStore源码的阅读和修改,可以进一步提升对MVC模式、Spring的IoC和...
在压缩包文件名称 "springapp-petclinic" 中,"petclinic"可能是JPetStore的一个变体或者相关项目,通常Spring PetClinic是一个与JPetStore类似的学习资源,用于教授Spring Boot和Spring Data JPA等现代Spring技术。...
JPetStore作为Spring官方提供的一个示例项目,是学习Spring框架的最佳实践之一。本篇文章将深入探讨如何在MyEclipse环境中搭建和运行这个基于Spring的JPetStore工程,并介绍其中涉及的关键技术点。 首先,JPetStore...
在jpetstore4.0中,Spring主要负责以下职责: 1. **控制反转(IOC)**:Spring通过反转对象创建和管理的过程,使得开发者可以专注于业务逻辑,而无需关心对象的创建和销毁。 2. **服务层管理**:Spring的Bean工厂...
而JPetStore作为Spring框架的经典示例项目,是学习和理解Spring核心特性的绝佳起点。本文将深入探讨Spring JPetStore项目,揭示其中蕴含的诸多技术知识点,帮助开发者提升对Spring的理解和应用能力。 1. **Spring...
本文将深入探讨如何在Eclipse环境中使用Spring框架,以JPetStore项目为例,帮助开发者了解Spring的核心特性和实际应用。 一、Eclipse与Spring框架 Eclipse是一款开源的Java IDE,提供了丰富的插件支持,使得开发者...
最新spring带的JPetStore的MyEclipse项目,包括了数据库,可用hsqldb直接运行,可以直接导入MyEclipse中并部署运行。 在Myeclipse里新建一个web项目,导入shopping项目即可,数据库在db文件夹里
9. 整合Struts:虽然Spring MVC已经成为主流的Web开发框架,但在JPetStore中,Struts被用作对比和学习的工具,展示了如何在Spring环境中集成其他MVC框架,这有助于开发者理解不同框架之间的协同工作。 通过深入研究...
spring自带的JPetStore,我已经配置好(数据库也配置好,用的是hsqldb),可以直接导 入eclipse中运行。共3个压缩包
总的来说,jpetstore项目是一个极好的学习资源,对于想要深入理解和掌握Spring、iBatis和Struts的人来说,它是不可或缺的实践案例。通过分析和调试这个项目,你不仅可以提升自己的编程技能,还能对Java Web开发的...
综上所述,JPetStore (Struts + Spring + Hibernate)版是一个理想的学习资源,它展示了如何在实际项目中集成和使用这些流行的技术,对于Java Web开发人员来说,深入研究这个项目可以提升他们对现代企业级应用开发的...
6. **配置Hibernate**:由于JPetStore使用了Hibernate作为ORM工具,需要配置Hibernate的SessionFactory,并在Spring中进行声明。 7. **运行与调试**:最后,配置Tomcat服务器,部署项目并启动,通过浏览器访问应用...
这个项目是Spring官方提供的,旨在帮助开发者学习和理解Spring的工作原理以及如何在实际开发中运用Spring。 ### 1. Spring MVC框架 Spring MVC是Spring框架的一部分,它是一个用于构建Web应用的轻量级MVC(Model-...
在 jpetstore 中,Spring 作为整个应用的“胶水”,管理各个组件的生命周期和依赖关系。它可能通过XML配置或注解驱动的方式来定义bean,这些bean可以是DAO(数据访问对象)、Service、Controller等。Spring还提供了...
jpetstore项目是一个示例应用,它展示了如何在实际环境中运用多种设计模式,为学习J2EE提供了一个生动的实践场景。 J2EE,即Java企业版,是Java平台的一部分,专为开发和部署分布式企业级应用程序而设计。它提供了...
在JPetStore实例中,Spring主要负责控制反转(IOC)和面向切面编程(AOP)。IOC使得对象之间的依赖关系由Spring容器管理,而AOP则实现了如事务管理这样的横切关注点。 2. **iBatis**:iBatis是一个持久层框架,它...
spring自带的JPetStore,我已经配置好(数据库也配置好,用的是hsqldb),可以直接导入eclipse中运行。共3个压缩包
spring自带的JPetStore,我已经配置好(数据库也配置好,用的是hsqldb),可以直接导 入eclipse中运行。共3个压缩包
**Spring MVC 自带的 JPetStore 源码解析** `Spring MVC` 是一个轻量级的、模型-视图-控制器(Model-...通过学习和分析 `jpetstore`,开发者可以更好地理解和掌握 Spring MVC 的工作原理,为自己的项目开发提供借鉴。