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;
}
}
测试: