SSH框架网上商城项目第9战之添加和更新商品类别功能实现

yizhihongxing

SSH框架网上商城项目第9战之添加和更新商品类别功能实现

本文介绍了如何实现网上商城项目中添加和更新商品类别的功能。我们使用SSH框架来开发此项目。在本文中,您将学习如何创建商品类别的实体类、DAO层、Service层和Action层,以及如何在网页中使用JavaScript和JQuery实现实时验证和提交表单。

创建商品类别的实体类

为了在数据库中存储商品类别数据,我们需要创建一个类来表示商品类别。创建实体类是SSH框架中的第一步。在本例中,我们创建一个名为“Category”的实体类,具有以下属性:

public class Category {
    private int id;
    private String name;
    private String description;
    // 省略 getter 和 setter 方法
}

创建商品类别的DAO层

接下来,我们需要创建DAO层。DAO层是与数据库进行交互的层。它封装了所有的数据库访问逻辑,如保存、更新、查询和删除。在本例中,我们创建一个名为“CategoryDAO”的接口,它继承了Hibernate的基本接口,并拥有如下方法:

public interface CategoryDAO extends BaseDAO<Category>{

    List<Category> queryAll();
}

然后我们创建其对应的实现,即“CategoryDAOImpl”类:

@Repository("categoryDAO")
public class CategoryDAOImpl extends BaseDAOImpl<Category> implements CategoryDAO {

    @Override
    public List<Category> queryAll() {
        String hql = "FROM Category";
        return (List<Category>) this.getHibernateTemplate().find(hql);
    }
}

创建商品类别的Service层

接下来我们需要创建Service层,这一层负责实现业务逻辑。在本例中,我们创建一个名为“CategoryService”的接口,并在其中定义逻辑:

public interface CategoryService extends BaseService<Category>{

    List<Category> queryAll();
}

实现该接口的类为“CategoryServiceImpl”:

@Service("categoryService")
@Transactional
public class CategoryServiceImpl extends BaseServiceImpl<Category> implements CategoryService {

    @Autowired
    private CategoryDAO categoryDAO;

    @Override
    public List<Category> queryAll() {
        return categoryDAO.queryAll();
    }
}

创建商品类别的Action层

Action层是前端访问后端的接口。它处理所有的请求和响应。在本例中,我们创建了一个名为“CategoryAction”的类。该类处理收到的请求并向前端响应结果。

@Controller
@RequestMapping("/category")
public class CategoryAction extends BaseAction<Category> {

    @Autowired
    private CategoryService categoryService;

    @RequestMapping("/list")
    public String list(Model model) {
        List<Category> categoryList = categoryService.queryAll();
        model.addAttribute("categoryList", categoryList);
        return "category/list.jsp";
    }
}

添加商品类别的功能实现

我们可以添加一个新的商品类别,步骤如下:

  1. 在前端页面中添加一个表单,在该表单的“action”属性中提供一个URL路径,该路径与后台的Action层中的方法相对应。

  2. 在后台的Action层中创建一个方法来处理该请求,并将表单数据传递给Service层进行处理。

@RequestMapping("/add")
public String add(HttpServletRequest request, HttpServletResponse response, Model model) {
    String name = (String) request.getParameter("name");
    String description = (String) request.getParameter("description");
    Category category = new Category();
    category.setName(name);
    category.setDescription(description);
    categoryService.save(category);
    return "redirect:/category/list";
}
  1. 在前端页面中使用JavaScript和JQuery实现实时验证表单,并在提交表单前显示验证结果。
$(document).ready(function() {

    $('#addCategoryForm').submit(function(event) {

        // 阻止表单提交
        event.preventDefault();

        // 验证表单
        var isValid = true;
        var $name = $('#name');
        var $description = $('#description');

        // 验证名称
        if ($name.val().trim() == '') {
            $name.parent().addClass('has-error');
            $name.next().text('名称不能为空').show();
            isValid = false;
        }

        // 验证描述
        if ($description.val().trim() == '') {
            $description.parent().addClass('has-error');
            $description.next().text('描述不能为空').show();
            isValid = false;
        }

        // 如果表单合法,提交表单
        if (isValid) {
            this.submit();
        }
    });

    // 失去焦点时验证
    $('#name').blur(function() {
        var $name = $(this);
        if ($name.val().trim() == '') {
            $name.parent().addClass('has-error');
            $name.next().text('名称不能为空').show();
        } else {
            $name.parent().removeClass('has-error');
            $name.next().hide();
        }
    });

    $('#description').blur(function() {
        var $description = $(this);
        if ($description.val().trim() == '') {
            $description.parent().addClass('has-error');
            $description.next().text('描述不能为空').show();
        } else {
            $description.parent().removeClass('has-error');
            $description.next().hide();
        }
    });
});

更新商品类别的功能实现

同样的,我们可以更新一个商品类别,步骤如下:

  1. 在前端页面中显示表格并为每一行的编辑按钮提供一个URL路径,该路径与后台的Action层中的方法相对应。

  2. 在后台的Action层中创建一个方法来处理该请求,并将表单数据传递给Service层进行处理。

@RequestMapping("/edit/{id}")
public String edit(@PathVariable int id, Model model) {
    Category category = categoryService.findById(id);
    model.addAttribute("category", category);
    return "category/edit.jsp";
}
  1. 在前端页面中使用JavaScript和JQuery实现实时验证表单,并在提交表单前显示验证结果。
$(document).ready(function() {

    $('#editCategoryForm').submit(function(event) {

        // 阻止表单提交
        event.preventDefault();

        // 验证表单
        var isValid = true;
        var $name = $('#name');
        var $description = $('#description');

        // 验证名称
        if ($name.val().trim() == '') {
            $name.parent().addClass('has-error');
            $name.next().text('名称不能为空').show();
            isValid = false;
        }

        // 验证描述
        if ($description.val().trim() == '') {
            $description.parent().addClass('has-error');
            $description.next().text('描述不能为空').show();
            isValid = false;
        }

        // 如果表单合法,提交表单
        if (isValid) {
            this.submit();
        }
    });

    // 失去焦点时验证
    $('#name').blur(function() {
        var $name = $(this);
        if ($name.val().trim() == '') {
            $name.parent().addClass('has-error');
            $name.next().text('名称不能为空').show();
        } else {
            $name.parent().removeClass('has-error');
            $name.next().hide();
        }
    });

    $('#description').blur(function() {
        var $description = $(this);
        if ($description.val().trim() == '') {
            $description.parent().addClass('has-error');
            $description.next().text('描述不能为空').show();
        } else {
            $description.parent().removeClass('has-error');
            $description.next().hide();
        }
    });
});

以上就是添加和更新商品类别功能的实现攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SSH框架网上商城项目第9战之添加和更新商品类别功能实现 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • SpringBoot实现在webapp下直接访问html,jsp

    下面详细讲解如何在SpringBoot中配置,使得可以在webapp目录下直接访问HTML、JSP等静态资源。 1. Maven依赖 在pom.xml文件中添加以下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>s…

    Java 2023年5月20日
    00
  • Java中ArrayList同步的2种方法分享

    我很乐意为您提供“Java中ArrayList同步的2种方法分享”的攻略。 Java中ArrayList同步的2种方法分享 在Java中,ArrayList是一个非常常用的集合类,但是它不是线程安全的。为了保证多线程访问时的安全性,需要对ArrayList进行同步,接下来我们将分享两种方式可以使ArrayList变得线程安全。 方法一:使用Collectio…

    Java 2023年5月26日
    00
  • 解决vue动态下拉菜单 有数据未反应的问题

    针对“解决vue动态下拉菜单 有数据未反应的问题”的问题,下面是完整的解决攻略。 问题描述 在vue动态下拉菜单的实现中,经常会遇到数据未能反应到下拉菜单中的问题,这可能是由于数据未正确绑定或未正确更新导致的。这种情况下,我们需要对代码进行调试和修改,以确保数据正确地反应到下拉菜单中。 解决攻略 下面是解决vue动态下拉菜单数据未反应的完整攻略: 步骤一:数…

    Java 2023年6月15日
    00
  • 多端登录如何实现踢人下线需求实现

    实现多端登录下的踢人下线需求,可以采用以下几种方法: 基于Token和Session实现 方案简介:采用Token和Session配合,来实现多端登录下的踢人下线需求实现。 接口可以采用Token认证,每次客户端请求接口时,服务端进行Token验证并通过Session记录Token。 当用户进行登录操作时,客户端请求登录接口,服务端通过验证用户的账号和密码,…

    Java 2023年5月23日
    00
  • JAVA中的for循环几种使用方法讲解

    JAVA中的for循环几种使用方法讲解 在Java中,for循环是最常用的循环结构之一。它可以重复执行代码块,根据不同的循环条件可以有多种使用方式。 基本的for循环 最基本的for循环有三个部分,分别是循环变量初始化、循环条件和循环变量的更新。语法如下: for (循环变量初始化; 循环条件; 循环变量的更新) { // 循环体代码块 } 其中,循环变量初…

    Java 2023年5月26日
    00
  • spring控制事务的三种方式小结

    让我为您详细讲解一下“spring控制事务的三种方式小结”。 什么是事务 在介绍 Spring 的事务管理之前,我们需要先了解一下什么是事务。在数据库中,事务是指一组数据库操作,它们要么全部执行,要么全部不执行,是一个不可分割的工作单元。如果其中任意一条操作失败,那么整个事务就会被回滚,也就是所有已经提交的操作都会被回滚,回到事务开始前的状态。 Spring…

    Java 2023年5月20日
    00
  • 使用JAVA通过ARP欺骗类似P2P终结者实现数据封包监听

    首先需要明确的是,ARP欺骗是指通过伪造ARP响应的方式,诱导受害者将数据包发送至攻击者的电脑,从而实现数据封包监听、拦截等攻击行为。下面给出使用Java实现ARP欺骗的攻略过程。 1. 获取受害者电脑的MAC地址 要实现ARP欺骗的攻击,首先需要获取受害者电脑的MAC地址。可以通过以下代码实现: InetAddress address = InetAddr…

    Java 2023年6月15日
    00
  • spring、mybatis 配置方式详解(常用两种方式)

    请看下面的解释: spring、mybatis 配置方式详解 1. Spring 整合 MyBatis 方式 Spring 整合 MyBatis 是通过 Sring 的一个对象 MybatisSqlSessionFactoryBean 来实现的。首先导入依赖包: <!–Spring核心依赖–> <dependency> <g…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部