前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >纳税服务系统一(用户模块)【简单增删改查、日期组件、上传和修改头像】

纳税服务系统一(用户模块)【简单增删改查、日期组件、上传和修改头像】

作者头像
Java3y
发布于 2018-04-02 06:09:21
发布于 2018-04-02 06:09:21
1.7K00
代码可运行
举报
文章被收录于专栏:Java3yJava3y
运行总次数:0
代码可运行

前言

为了更好地掌握SSH的用法,使用一个纳税服务系统来练手…..搭建SSH框架环境在上一篇已经详细地说明了。http://blog.csdn.net/hon_3y/article/details/72630031

用户模块:本文主要的知识点:

  • 简单的CRUD
  • 使用日期组件让用户挑选日期
  • 上传和修改头像

用户模块需求

拥有增删改查和导入导出到EXCEL的功能

这里写图片描述

添加用户:有了这个界面,我们就知道实体表的属性有什么了。

a


添加配置文件

每个模块都应该有自己的配置文件,这样的话就方便我们管理模块之间的功能,不用把所有的配置都写在总文件中。

因此,我们在user模块创建了一个user包,下面又创建了config包来管理配置文件

这里写图片描述

JavaBean与映射文件

JavaBean

根据上面需求要添加用户的属性,直接写就行了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class User implements Serializable {

    private String id;
    private String dept;
    private String account;
    private String name;
    private String password;

    private String headImg;
    private boolean gender;
    private String state;
    private String mobile;
    private String email;
    private Date birthday;
    private String memo;

    public static String USER_STATE_VALID = "1";//有效,
    public static String USER_STATE_INVALID = "0";//无效

    public User() {
    }

    public User(String id, String dept, String account, String name, String password, String headImg, boolean gender, String state, String mobile, String email, Date birthday, String memo) {
        this.id = id;
        this.dept = dept;
        this.account = account;
        this.name = name;
        this.password = password;
        this.headImg = headImg;
        this.gender = gender;
        this.state = state;
        this.mobile = mobile;
        this.email = email;
        this.birthday = birthday;
        this.memo = memo;
    }

    //各种setter和getter
}

User.hbm.xml

映射文件也非常简单,因为没有关联关系字段,直接写属性就行了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="zhongfucheng.user.entity.User" table="user">
        <id name="id" type="java.lang.String">
            <column name="id" length="32" />
            <generator class="uuid.hex" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="20" not-null="true" />
        </property>
        <property name="dept" type="java.lang.String">
            <column name="dept" length="20" not-null="true" />
        </property>     
        <property name="account" type="java.lang.String">
            <column name="account" length="50" not-null="true" />
        </property>
        <property name="password" type="java.lang.String">
            <column name="password" length="50" not-null="true" />
        </property>
        <property name="headImg" type="java.lang.String">
            <column name="headImg" length="100" />
        </property>
        <property name="gender" type="java.lang.Boolean">
            <column name="gender" />
        </property>
        <property name="email" type="java.lang.String">
            <column name="email" length="50" />
        </property>
        <property name="mobile" type="java.lang.String">
            <column name="mobile" length="20" />
        </property>
        <property name="birthday" type="java.util.Date">
            <column name="birthday" length="10" />
        </property>
        <property name="state" type="java.lang.String">
            <column name="state" length="1" />
        </property>
        <property name="memo" type="java.lang.String">
            <column name="memo" length="200" />
        </property>
    </class>

</hibernate-mapping>

写完映射文件,记得要在Spring的总配置文件中读取映射文件…值得注意的是,用户模块专门用一个user包来管理下面的代码,这样好管理!

这里写图片描述


编写Dao

UserDao接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * UserDao接口,继承着UserDao
 * */
public interface UserDao extends BaseDao<User> {

}

UserDaoImpl实现类

把UserDaoImple对象添加到IOC容器中管理

注意:因为我们在BaseDao中使用的是HibernateDaoSupport这个API,因此我们在UserDao中是需要在XML配置,注入SessionFactory的。

在总配置文件中是有专门注入SessionFactory的bean配置的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <!-- 所有业务dao的parent -->
    <bean id="baseDao" abstract="true">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 继承着BaseDaoImpl实现类,就有了CRUD的方法
 * 又实现了UserDao接口,那么UserDao接口就可以对User模块有相对应的补充
 *
 * */

public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao {



}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <bean id="userDaoImpl" class="zhongfucheng.user.dao.impl.UserDaoImpl" parent="baseDao"></bean>
    <context:component-scan base-package="zhongfucheng.user"/>
  • 把user模块的spring配置文件添加到总配置文件中
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <!--这是user模块的配置文件-->
    <import resource="classpath:zhongfucheng/user/config/user-bean.xml"/>

编写Service

Service接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
     * Created by ozc on 2017/5/23.
     */
    public interface UserService {

        //新增
        public void save(User user);
        //更新
        public void update(User user);
        //根据id删除O
        public void delete(Serializable id);
        //根据id查找
        public User findObjectById(Serializable id);
        //查找列表
        public List<User> findObjects();

    }

UserServiceImpl

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package zhongfucheng.user.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import zhongfucheng.user.dao.UserDao;
import zhongfucheng.user.entity.User;
import zhongfucheng.user.service.UserService;

import java.io.Serializable;
import java.util.List;

/**
 * Created by ozc on 2017/5/23.
 */

@Service
public class UserServiceImpl implements UserService {


    @Qualifier("userDaoImpl")
    @Autowired
    private UserDao userDaoImpl;


    @Override
    public void save(User user) {
        userDaoImpl.save(user);
    }

    @Override
    public void update(User user) {
        userDaoImpl.update(user);
    }

    @Override
    public void delete(Serializable id) {

        userDaoImpl.delete(id);
    }

    @Override
    public User findObjectById(Serializable id) {
        return userDaoImpl.findObjectById(id);
    }

    @Override
    public List<User> findObjects() {
        return userDaoImpl.findObjects();

    }
}

UserAction

UserAction应该根据增删改查应该有这么几个方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 1.提供新增页面
 * 2.确定新增用户方法
 * 3.提供修改页面
 * 4.确定修改用户方法
 * 5.删除用户
 * 6.批量删除用户
 * 7.提供列表展示页面
 *
 * */
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package zhongfucheng.user.action;

import com.opensymphony.xwork2.ActionSupport;

/**
 * Created by ozc on 2017/5/23.
 */

/**
 * 1.提供新增页面
 * 2.确定新增用户方法
 * 3.提供修改页面
 * 4.确定修改用户方法
 * 5.删除用户
 * 6.批量删除用户
 * 7.提供列表展示页面
 *
 *
 * */
public class UserAction extends ActionSupport {

    public String listUI() {

        return null;
    }

    public String addUI() {

        return null;
    }
    public String editUI() {

        return null;
    }
    public String edit() {

        return null;
    }
    public String delete() {

        return null;
    }
    public String add() {

        return null;
    }

    public String deleteSelect() {

        return null;
    }

}

在Struts配置文件中配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <package name="user-action" extends="struts-default" namespace="/user">
        <action name="user_*" class="zhongfucheng.user.action.UserAction" method="{1}">

        </action>

    </package>

</struts>
  • 添加user模块的Struts配置文件到总配置文件中
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <!--User模块-->
    <include file="zhongfucheng/user/config/user-struts.xml"/>

完成美工设计页面显示

对美工给的页面进行调整

导入到项目中:

这里写图片描述

我们发现在JSP页面中,以下的代码是经常会出现的,因此我们把它封装一下:

这里写图片描述

创建一个公共文件,封装经常用到的jsp页面:

这里写图片描述

要使用的地方,直接导入就行了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<head>
    <%@include file="/common/header.jsp"%>
    <title>用户管理</title>

</head>

接下来只要对各个功能进行填充逻辑代码,就可以了。

添加用户UI

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public String addUI() {
        return "addUI";
    }

效果如图所示:我们的头像和角色先不做,把其他的先做了再看看。

这里写图片描述

确定添加用户

写上我们请求的路径:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /*************注入Service************************/
    @Qualifier("userServiceImpl")
    @Autowired
    private UserService userServiceImpl;


    /************数据自动封装,给出setter和getter*************************/
    private User user;
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
    /************得到Service返回的数据*************************/
    private List<User> userList;

    public String add() {
    userServiceImpl.save(user);

    //跳转到列表显示页面
    return "list";
    }
  • 配置跳转到列表显示页面的result【Action重定向的方式,防止刷新再次请求】
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            <!--返回列表展示页面,重定向到列表展示-->
            <result name="list" type="redirectAction">
                <param name="actionName">user_listUI</param>
            </result>
  • 效果:下面的列表展示还没有做呢,但是添加用户的效果已经做出来了。

这里写图片描述


列表展示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /************得到Service返回的数据*************************/
    //这里一定要给setter和getter方法,这样JSP才能够得到属性。不然就得不到了!!!我在这里弄了很久!!!!
    private List<User> userList;
    public List<User> getUserList() {
        return userList;
    }
    public void setUserList(List<User> userList) {
        this.userList = userList;
    }

    public String listUI() {
        userList = userServiceImpl.findObjects();

        return "listUI";

    }

JSP通过iterator得到数据,直接写就行了。因为Action中该属性有getter方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        <s:iterator value="userList">
        <tr bgcolor="f8f8f8">
            <td align="center"><input type="checkbox" name="selectedRow" value="<s:property value="id"/> "/></td>
            <td align="center"><s:property value="name"/></td>
            <td align="center"><s:property value="account"/></td>
            <td align="center"><s:property value="dept"/></td>
            <td align="center"><s:property value="gender?'男':'女'"/></td>
            <td align="center"><s:property value="email"/></td>
            <td align="center">
                <a href="javascript:doEdit(<s:property value="id"/>)">编辑</a>
                <a href="javascript:doDelete(<s:property value="id"/>)">删除</a>
            </td>
        </tr>
        </s:iterator>

这里写图片描述


修改功能

这里写图片描述

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public String editUI() {

        //外边已经传了id过来了,我们要找到id对应的User
        if (user.getId() != null && user != null) {

            //直接获取出来,后面JSP会根据User有getter就能读取对应的信息!
            user = userServiceImpl.findObjectById(this.user.getId());
    }
        return "editUI";
    }
  • JSP修改用户的界面是不用显示id的,但是我们在修改用户的时候,是根据id来修改的。因此我们加入一个隐藏域
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   <s:hidden name="user.id"/>
  • 指定处理的路径:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
action="${basePath}user/user_edit.action"
  • 修改的方法:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public String edit() {
        //Struts2会自动把JSP带过来的数据封装到User对象上
        if (user.getId() != null && user != null) {

            userServiceImpl.update(user);
        }

        //跳转回列表展示
        return "list";
    }
  • 效果:

这里写图片描述


删除功能

delete方法就非常简单了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        function doDelete(id) {
            document.forms[0].action = "${basePath}user/user_delete.action?user.id="+id;
            document.forms[0].submit();
        }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public String delete() {

        if (user.getId() != null && user != null) {
            userServiceImpl.delete(user.getId());
        }

        return "list";
    }

这里写图片描述


批量删除

这里写图片描述

响应点击事件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        function doDeleteAll() {
            document.forms[0].action = "${basePath}user/user_deleteSelect.action";
            document.forms[0].submit();

        }
  • Action使用一个String[]接收复选框来过来的数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    private String[] selectedRow;
    public String[] getSelectedRow() {
        return selectedRow;
    }
    public void setSelectedRow(String[] selectedRow) {
        this.selectedRow = selectedRow;
    }

    public String deleteSelect() {
        for (String s : selectedRow) {
            userServiceImpl.delete(s);
        }
        return "list";
    }

前面我们在写用户模块的时候还有一些没有解决掉的问题:

这里写图片描述

日期组件

我们都知道Struts2仅仅只会自动封装yyyy-MM-dd格式的日期数据,如果不是这个格式,它就会报错。我们也可以自定义类型转换器来让Struts2匹配多种的日期格式。自定义类型转换器我们已经会了。

我们来用用wdatepicker日期组件,这个组件从源头上就把日期格式定义成yyyy-MM-dd格式了。

导入文件夹到js目录

a

引入日期组件

添加用户界面和编辑用户界面都要引入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <script type="text/javascript" src="${basePath}js/datepicker/WdatePicker.js"></script>

在日期上使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        <tr>
            <td class="tdBg" width="200px">生日:</td>
            <td><s:textfield id="birthday" name="user.birthday" readonly="true" onfocus="WdatePicker({'skin':'whyGreen','dateFmt':'yyyy-MM-dd'});"/></td>
        </tr>

这里写图片描述


编辑页面

当使用了日期控件的时候,如果不指定格式,回显日期的格式是有点乱的:

这里写图片描述

因此,我们在指定回显的日期格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <td class="tdBg" width="200px">生日:</td>
    <td>
        <s:textfield id="birthday" name="user.birthday" readonly="true"
                     onfocus="WdatePicker({'skin':'whyGreen','dateFmt':'yyyy-MM-dd'})">
            <s:param name="value">
                <s:date name='user.birthday' format='yyyy-MM-dd'/>
            </s:param>
        </s:textfield>
    </td>

新增上传头像

我们在学习Struts2的时候已经说过Struts2也为我们封装了上传文件的功能。用起来特别简单:http://blog.csdn.net/hon_3y/article/details/71091593

Action处理

Action给出对应的属性值,和setter()方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /*************上传头像************************/
    private File headImg;
    private String headImgFileName;
    private String headImgContentType;

    public void setHeadImg(File headImg) {
        this.headImg = headImg;
    }

    public void setHeadImgFileName(String headImgFileName) {
        this.headImgFileName = headImgFileName;
    }

    public void setHeadImgContentType(String headImgContentType) {
        this.headImgContentType = headImgContentType;
    }

Action业务方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public String add() throws IOException {
        if (user != null) {

            //判断用户有没有传入头像
            if (headImg != null) {
                //得到要把头像上传到服务器的路径
                javax.servlet.ServletContext servletContext = ServletActionContext.getServletContext();
                String realPath = servletContext.getRealPath("upload/user");

                //由于用户上传的名字可能会相同,如果相同就被覆盖掉,因此我们要修改上传文件的名字【独一无二】
                headImgFileName = UUID.randomUUID().toString() + headImgFileName.substring(headImgFileName.lastIndexOf("."));
                FileUtils.copyFile(headImg, new File(realPath, headImgFileName));
            }

            //设置图片与用户的关系
            user.setHeadImg(headImgFileName);

            userServiceImpl.save(user);
            //跳转到列表显示页面
            return "list";
        }
        return null;
    }

效果:

这里写图片描述

这里写图片描述


修改上传头像

editUI

在编辑显示的时候,需要判断该用户是否有没有上传图片,有的话才显示。不然就会出现一张无法显示的图片。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <td>

        <%--未必用户就有上传图片,因此需要判断一下--%>
        <s:if test="%{user.headImg != null && user.headImg != ''}">
            <img src="${basePath}upload/user/<s:property value="user.headImg"/>" width="100" height="100"/>
        </s:if>

        <input type="file" name="headImg"/>
    </td>

Action处理

用户修改时,Action的处理和新增是一样的。也是判断JSP页面有没有把图片带过来,如果有,修改就行了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public String edit() throws IOException {
        //Struts2会自动把JSP带过来的数据封装到User对象上
        if (user.getId() != null && user != null) {
            if (headImg != null) {

                //得到要把头像上传到服务器的路径
                javax.servlet.ServletContext servletContext = ServletActionContext.getServletContext();
                String realPath = servletContext.getRealPath("upload/user");
                //由于用户上传的名字可能会相同,如果相同就被覆盖掉,因此我们要修改上传文件的名字【独一无二】
                headImgFileName = UUID.randomUUID().toString() + headImgFileName.substring(headImgFileName.lastIndexOf("."));
                FileUtils.copyFile(headImg, new File(realPath, headImgFileName));

                //设置图片与用户的关系
                user.setHeadImg(headImgFileName);
            }

            userServiceImpl.update(user);
        }
        return "list";
    }

效果:

这里写图片描述

总结

这一篇几乎都是我们经常用的知识点,只是CRUD而已了。

  • 如果在JSP某些代码有很多地方都能使用的话,那么我们可以把它抽取出来。
  • 使用FileUpload工具类将文件上传到指定的位置上
  • 在Web程序中,页面上很多的效果都是可以用JS组件来干的。比如我们这次的日期组件,不仅仅在页面上可以有很好的效果,还能够从根本上限定用户不能随意输入数据。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java3y 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
纳税服务系统四(角色模块)【角色与权限、角色与用户】
需求分析 我们直接来看看原型图,看看需求是怎么样的: 这里写图片描述 这里写图片描述 我们看到上图,就会发现角色模块主要还是CRUD,唯一不同的就是它不再是单独的实体关系。角色与权限是存在关系的。 之
Java3y
2018/04/02
4.6K0
纳税服务系统四(角色模块)【角色与权限、角色与用户】
纳税服务系统六(信息发布管理模块)【Ueditor、异步信息交互、抽取BaseService、条件查询、分页】
需求分析 我们现在来到了纳税服务系统的信息发布管理模块,首先我们跟着原型图来进行需求分析把: 一些普通的CRUD,值得一做的就是状态之间的切换了。停用和发布切换。 值得注意的是:在信息内容中,它可以带
Java3y
2018/04/02
1.9K0
纳税服务系统六(信息发布管理模块)【Ueditor、异步信息交互、抽取BaseService、条件查询、分页】
纳税服务系统三(优化处理)【异常处理、抽取BaseAction】
前言 本博文主要讲解在项目中异常是怎么处理的。一般我们都不会直接把后台异常信息返回给用户,用户是看不懂的。让用户看见一大串的错误代码,这是不合理的。因此我们需要对报错进行处理。 我们在开发的时候是使用层次来进行开发的。因此有三个层次: ① Action层可能出现解析请求参数、返回结果有问题; dao【如果在这里报错了,一般都是比较致命的,我们先不管】 ② Service 层则可能出现请求中要做的业务操作出现问题;出现了问题要根据实际情况判断是否会影响本次操作结果,action中要根据异常信息进行判断然后确定
Java3y
2018/04/02
5780
纳税服务系统三(优化处理)【异常处理、抽取BaseAction】
【SSH测试整合Demo】企业人事管理系统
前言 前面我们已经学习了怎么整合SSH框架了。是时候拿一个小项目来练练手了….我们现在要设计一个企业人事管理系统… 需求: **要求对员工信息进行维护; ** 后台系统先登陆,才能操作员工: 添加/修改/删除 没有登陆,只能查看列表,不能操作! 功能分类: 【管理员模块】 注册/登陆 【员工模块】 1) 添加一个员工, 指定添加的部门 2) 对指定的员工信息修改 3) 删除选择员工 4) 列表展示 数据库设计 管理员表: t_admin 员工表: t_user 部门: t_dept ----
Java3y
2018/03/16
2.7K0
【SSH测试整合Demo】企业人事管理系统
纳税服务系统五(登陆与系统拦截)【配置系统、子系统首页、登陆与拦截】
前言 到目前位置,我们的用户模块和角色模块基本已经做好了,我们的纳税服务系统是放在一个大系统里边的。我们应该把我们已经写好的模块加载进去。 本文主要的知识点: 配置系统首页 登陆模块 权限拦截模块 加
Java3y
2018/04/02
1.6K0
纳税服务系统五(登陆与系统拦截)【配置系统、子系统首页、登陆与拦截】
Maven+SSM框架实现简单的增删改查
spring 使用基本的 JavaBean 来完成以前只可能由 EJB 完成的事情。然而, Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java 应用都可以从 Spring 中受益。 简单来说, Spring 是一个轻量级的控制反转(IoC )和面向切面( AOP )的容器框架。
yaohong
2019/09/11
1.2K0
Maven+SSM框架实现简单的增删改查
SpringMVC+Mybatis整合的增删改查
项目文件下载地址:http://download.csdn.net/detail/u010634066/8188965
石臻臻的杂货铺[同名公众号]
2021/07/14
3310
struts2+Hibernate实现用户登陆功能
实现的功能,在登陆页面输入Username和PassWord后,将username和password通过Hibernate匹对数据库是否含有一样的username和password,若有则登陆进去,若没有则返回到登陆页面 显示层 <%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <%@taglib prefix="s" uri="/struts-tags"%> <!DO
用户1624346
2018/04/18
1K0
纳税服务系统七(投诉管理模块)【显示投诉信息、处理回复、我要投诉、Quartz自动受理、统计图FusionCharts】
投诉受理管理模块 接下来,就是来开发我们的投诉受理管理模块了…..我们来看看原型图与需求吧: 查询用户提交的投诉信息,可以根据投诉部门(部门A/B)、投诉时间段、状态进行查询。在列表信息中展示投诉标题、被投诉部门、被投诉人、投诉时间、状态(待受理、已受理、已失效)、操作;其中操作栏内内容为“处理”,点击“处理”则在打开的查询页面中查看具体的投诉信息并且可以多次回复投诉信息;一旦回复则说明已受理该投诉。 投诉详细信息:在本页面中首先要明显地展示出当前投诉是否已经受理;然后再显示投诉人信息、被投诉信息、受理信息
Java3y
2018/04/02
4.9K0
纳税服务系统七(投诉管理模块)【显示投诉信息、处理回复、我要投诉、Quartz自动受理、统计图FusionCharts】
javaweb案例实训之基于jsp和servlet的用户管理开发
案例代码:https://github.com/yangsir1688/controlManagerPage/tree/master/jlnk-school/demo-case
杨校
2019/06/13
1.3K0
Struts2【拦截器】
什么是拦截器 拦截器Interceptor…..拦截器是Struts的概念,它与过滤器是类似的…可以近似于看作是过滤器 为什么我们要使用拦截器 前面在介绍Struts的时候已经讲解过了,Struts为我们实现了很多的功能,比如数据自动封装阿..文件上传功能阿….Struts为我们提供的这些功能都是通过拦截器完成的…… 数据自动封装通过<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersIntercep
Java3y
2018/03/15
9090
Struts2【拦截器】
Spring项目综合整合实践
springmvc提供的ResponseEntity类型,使用它可以很方便地定义返回的HttpHeaders和HttpStatus
用户9184480
2024/12/13
880
Spring项目综合整合实践
CRM第一天:客户关系管理系统的环境搭建和注册
子曰:学而不思则罔,为了巩固一下学习的框架知识,同时为了增加对框架的实际应用能力,同时增加项目经验。从今天开始做一个SSH框架的客户关系管理系统。
AlbertYang
2020/09/08
5500
CRM第一天:客户关系管理系统的环境搭建和注册
Spring+SpringMVC+Hibernate简单整合(转)
SpringMVC又一个漂亮的web框架,他与Struts2并驾齐驱,Struts出世早而占据了一定优势,下面同样做一个简单的应用实例,介绍SpringMVC的基本用法,接下来的博客也将梳理一下Struts2和SpringMVC的一些异同,通过梳理和旧知识的联系,让学习的成本变低,花很短的时间就可以了解一门貌似新的技术,其实本质没变。
yaohong
2019/09/11
8570
SSM整合实现增删改查操作【保姆式教学】
在 UserServiceImpl 方法上加上 @Service("userService").
全栈程序员站长
2022/09/01
1.7K0
SSM整合实现增删改查操作【保姆式教学】
struts2使用拦截器完成登陆显示用户信息操作和Struts2的国际化
  其实学习框架,就是为了可以很好的很快的完成我们的需求,而学习struts2只是为了替代之前用的servlet这一层,框架使开发更加简单,所以作为一个小菜鸟,特别感谢那些超级无敌变态开发的框架供我们
别先生
2018/01/02
1.2K0
struts2使用拦截器完成登陆显示用户信息操作和Struts2的国际化
使用SSM+easyui做个简单的增删改查
使用SSM+easyui做个简单的增删改查
Java架构师必看
2021/04/13
1.9K0
使用Jsp编写网页并实现数据库的增删改查
首先jsp 和Servlet语句基本一样,这里的实现需要用到上篇http://blog.csdn.net/qq_32539825/article/details/70494788里的部分内容 包括UserCoon.java UserDao.java User.java
曼路
2018/10/18
9.5K3
使用Jsp编写网页并实现数据库的增删改查
MyBatis+JSP+Servlet...MySql实现分页/增删改查:代码详细有注释~
学习MyBtatis 的第二个星期, 大概已经明白差不多了. 已经可以在 控制台完成 增删改查 了,哈哈哈哈(大佬路过别笑😀)… 感觉还不错呢. 现在也开始学习在 CSDN上写笔记博客, 哈哈以前都是看其它大佬的. 自己平时也记笔记但都是在 OneNote上:
Java_慈祥
2024/08/06
1760
MyBatis+JSP+Servlet...MySql实现分页/增删改查:代码详细有注释~
Struts1 增删改查
本篇文章介绍如何使用Struts1进行增删改查,仅是对自己学习的记录,并没有深入分析每个模块(不重复造轮子O(∩_∩)O~)。
Yano_nankai
2018/10/08
9710
Struts1 增删改查
推荐阅读
相关推荐
纳税服务系统四(角色模块)【角色与权限、角色与用户】
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文