ssm-学子商城-项目第五天

本文档详细介绍了SSM项目中个人信息修改的实现过程,从持久层、业务层到控制器层,包括页面的AJAX更新。同时,讲解了登录拦截器的配置和地址管理模块的创建,涉及地址表的创建、添加地址页面的展示以及省市区三级联动菜单的实现。
摘要由CSDN通过智能技术生成

6.2 个人信息-修改

6.2.1 修改个人信息-持久层

6.2.2 修改个人信息-业务层

在IUserService定义方法

void updateUser(Integer id,String username,Integer gender,String phone,String email);

在UserService类中实现方法

public void updateUser(Integer id,String username,Integer gender,String phone,String email){

    1.User user = new User();

    2.判断username是否存在?
    User u1 = userMapper.selectByUsername(username);
    3.判断是否为null
    4.如果u1==null
        user.setUsername(username); 
    5.如果u1!=null
        6.判断用户名是否为登录的用户名
        User u2 = userMapper.selectById(id);
        7.如果u2!=null
            if(u2.getUsername.equals(username){
                //不做操作  
            }else{
                //抛出异常
            }

    id,username???,phone,email,gender   
    8.userMapper.update(user);

}

测试:

6.2.3 修改个人信息-控制器层

修改个人信息url

/user/updateUser.do
请求参数:session(id),4个
请求方式:GET
响应方式:ResponseBody

在UserController类中定义方法

@
@
public ResponseResult<Void> updateUser(HttpSession session,String username,String phone,String email,Integer gender){
    1.创建 ResponseResult<Void> rr;
    2.
    try{
        调用updateUser();
        封装状态码和响应信息(成功)
    }catch(Exception e){
        封装失败的状态码和响应信息
    }
    3.reurn rr;
}

6.2.4 修改个人信息-页面

页面的ajax

function btnUpdate(){
$.ajax({
    "url":"${pageContext.request.contextPath}/user/updateUser.do",
    "data":$("#personInfo").serialize(),
    "type":"POST",
    "dataType":"json",
    "success":function(obj){
        alert(obj.state+","+obj.message);
    }
}); 
}

更新页面数据

1.在业务层定义方法getUserById

User getUserById(Integer id);

public User getUserById(Integer id){
    return userMapper.selectById(id);
}

测试:

2.在控制器层调用方法,session保存修改后的信息

User user = userService.getUserById(this.getId(session));
session.setAttribute("user",user);

3.在页面的ajax的state==1,重新显示页面

if(obj.state==1){
location="...../user/showPersonInfo.do";
}

调整页面:左边栏

$(function(){
//所有的dd隐藏
 $("#leftsidebar_box dd").hide();
//让账号管理显示
 $("#leftsidebar_box .count_managment dd").show();
//所有的自定义列表的标题后边的图片 myOrder2.png
$("#leftsidebar_box dt img").attr("src","../images/myOrder/myOrder2.png");
//设置账号管理的图片和其他的三个不相同
$("#leftsidebar_box .count_managment").find('img').attr("src","../images/myOrder/myOrder1.png");

});

登录拦截器

1.定义拦截器

public class LoginInterceptor implements 
HandlerInterceptor{

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
        throws Exception {
    //1.判断session user是否为null
    HttpSession session = request.getSession();
    Object obj = session.getAttribute("user");
    if(obj==null){
    //2.如果null,重定向的登录页面
        String url = request.getContextPath()
                +"/user/showLogin.do";
        response.sendRedirect(url);
        return false;
    }else{
    //3.如果不为null,继续 执行contoller方法
        return true;
    }
}

public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
        ModelAndView modelAndView) throws Exception {
    // TODO Auto-generated method stub

}

public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
        throws Exception {
    // TODO Auto-generated method stub

}

}

2.配置拦截器 在spring-mvc.xml文件中,配置拦截器

<!-- 配置拦截器 -->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/user/*"/>
            <mvc:exclude-mapping path="/user/showRegister.do"/>
            <mvc:exclude-mapping path="/user/register.do"/>
            <mvc:exclude-mapping path="/user/checkUsername.do"/>
            <mvc:exclude-mapping path="/user/checkEmail.do"/>
            <mvc:exclude-mapping path="/user/checkPhone.do"/>
            <mvc:exclude-mapping path="/user/showLogin.do"/>
            <mvc:exclude-mapping path="/user/login.do"/>

            <bean class="cn.tedu.store.interceptor.LoginInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

地址管理

创建表 t_address

create table t_address(
    id int auto_increment primary key,
    uid int not null,
    recv_name varchar(50) not null,
    recv_province varchar(6) not null,
    recv_city varchar(6)  not null,
    recv_area varchar(6) not null,
    recv_distric varchar(100) not null,
    recv_address varchar(100) not null,
    recv_phone varchar(32) not null,
    recv_tel varchar(32),
    recv_zip varchar(6),
    recv_tag varchar(10),
    created_user varchar(50),
    created_time date,
    modified_user varchar(50),
    modified_time date
)default charset=utf8

1.添加地址

1.1添加地址-显示页面

定义控制器类

@RequestMapping("/address")
@Controller
public class AddressController extends BaseController{

    //显示addressAdmin.jsp页面
    @RequestMapping("/showAddress.do")
    public String showAddress(){
        return "addressAdmin";
    }
}

把addressAdmin.html改写为addressAdmin.jsp

调整页面

1.header.jsp

<!-- 页面顶部-->
<jsp:include page="header.jsp"></jsp:include>

2.left.jsp

<!-- 左边栏-->
<jsp:include page="left.jsp"></jsp:include>
在left.jsp的地址管理添加超级链接
 <a href="${pageContext.request.contextPath}/address/showAddress.do">
          地址管理
    </a>

调整拦截器

<mvc:mapping path="/user/*"/>

1.2 显示省市区三级联动菜单

在ftp服务器上下载省市区.zip,解压到指定的路径。执行sql文件的格式: source e:/t_dict.sql

1.2.1显示省的菜单

1.显示省的菜单-持久层 创建Province实体类;

public class Province{
    private Integer id;
    private String provinceCode;
    private String provinceName;

    //....
}   

创建DictMapper接口,定义方法selectProvince;

List<Province> selectProvince();

新建DictMapper.xml(复制,改名,内容删除)保留mapper节点,namespace=".....DictMapper"需要修改;定义select节点,完成查询省的信息的功能

<select  id="selectProvince" resultType="cn.tedu.store.bean.Province">
    select 
        id,
        province_code as provinceCode,
        province_name as provinceName
    from 
        t_dict_provinces
</select>

测试:

2.显示省列表-业务层 创建接口IDictService,并定义方法

List<Province> getProvince();

创建接口的实现类:DictService,实现方法

@Resource
private DictMapper dictMapper;

public List<Province> getProvince(){
    return dictMapper.selectProvince();
}

测试:

3.显示省列表-控制器层

/dict/showProvince.do
请求参数:无
请求方式:GET
响应方式:ResponseBody

创建控制器类:DictController

@RequestMapper("/dict")
@Controller
public class DictController{
    @Resource
    private IDictService dictService;
    @RequestMapper("/showProvince.do")
    @ResponseBody
    public ResponseResult<List<Province>>
                showProvince(){
        1.创建rr对象
        2.调用业务层方法,返回集合
        3.把集合设置到rr对象中
        4.return rr;
    }
}

测试:

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值