BookStore项目[修改资料和退出登录】

接着上回说到,这次我们将修改资料和退出登录

修改资料:

有了上次的项目经验,这个功能应该很轻松就拿下了。

   由于登录的时候,我们将user已经存入session了。其实可以直接从session中取出来,将需要回显的数据取出来。

就比如这样。

 

<tr>
					<td style="text-align:right; width:20%">会员邮箱:</td>
					<td style="width:40%; padding-left:20px">${u.email }</td>
	                    td>&nbsp;</td>

</tr>
	<tr>
				<td style="text-align:right">会员名:</td>
				<td style="padding-left:20px">${u.username }</td>
	<td>&nbsp;</td>
										</tr>

就像这样,从${u.email}中取出来一样。但是你发现有没有,性别那一栏有点难搞,因为你取出来不好显示啊。方法如下:

<td style="text-align:right">性别:</td>
							<td colspan="2">&nbsp;&nbsp;<input type="radio"
	name="gender" value="男" ${u.gender== "男"? "checked='checked' ":"" } />
    男 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input
	type="radio" name="gender" value="女" ${u.gender=="女"? "checked='checked' ":"" } /> 女</td>

${u.gender== "男"? "checked='checked' ":"" }其实仔细分析下这个,你会发现,这哪是取值,分明就是个判断句。所以应该好好看下EL表达式的作用,它的确可以这样用。由此还引申出两个另外的方法。

El表达式判断是否为空字符串

${empty 值}  返回true ,表示为空字符串;

 

e.g    <c:if test=" ${empty  chapterlist} ">

<td>是吧!</td>

</c:if>

El表达式判断是否为空

${值 eq  null } 返回true 的话,表示为空

<c:if test="${chapterlist eq  null }">

<td>不是!!!</td>

</c:if>  

页面回显说完了,当提交修改时,将对象传递过来,跟原来注册时封装表单一样的方法BeanUtils.populate(user, request.getParameterMap());

但是请大家注意了,这里你可以发现这里跟注册又不一样,咱们没有id啊,没错,注册时是可以没有,但是你要更新数据,没有id怎么查到原来的user呢?所以这里需要将id(在表单中)隐藏起来

<form action="${pageContext.request.contextPath }/modifyUserServlet" method="post">
				<input type="hidden" name="id" value="${u.id }"/>
				<table width="100%" border="0" cellspacing="2" class="upline">
										<tr>
								<td style="text-align:right; width:20%">会员邮箱:</td>
											<td style="width:40%; padding-left:20px">${u.email }</td>
											<td>&nbsp;</td>

用一个input标签隐藏起来,值从原来的session对象中取。

dao层调用的方法,update 通过id来更新。

// 修改用户信息
	public void modifyUser(User user) throws SQLException {
		QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
		qr.update("update user set password=? , gender=?, telephone=? where id=?",user.getPassword(),user.getGender(),user.getTelephone(),user.getId());
		
	}

OK,更新完毕了,重新存入session。可能有些人觉得改完密码需要重新登录下,也行。也很简单就相当于注销。

退出登录:注销

如果上步需要注销的,只需写上这部分代码就行了。注销很简单啊,只需要把用户的session杀死,然后重定向到登录界面接好了。注销还是需要先获得session然后杀死这个session。(这又映出一个问题我们session域存了那么多,杀死哪个呢?不,是直接使session失效,即所有的都不能用。想移除某个session域,使用这个方法把session.removeAttribute()移除session中的某项属性。)

request.getSession().invalidate();//相当于注消用户
response.sendRedirect(request.getContextPath()+"/modifyUserInfoSuccess.jsp");

小结:重定向是response的事,且重定向的路径不是跟转发一样的绝对路径。转发可以绝对路径(就是直接写请求路径而不需要加别的),重定向我不知道为啥不能,它是用request.getContextPath(),先获得根路径来算的。

OK。完,这次有点短......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值