您的位置:首页 > 其它

登录/注册后跳回登录/注册前的页面实现方法

2007-12-19 13:53 633 查看
网站开发中经常会遇到这样的问题,登录后自动转到了首页或者用户管理首页,这样有时候会让用户觉得很不方便,特别是电子商务类的网站,当用于在浏览产品页面时,需要购买,但是只有登录后的用户才能进入购买页面,所以如果当用户登录后进入的不是他登录前的产品浏览页面,他得去重新找,这是非常不友好的。

可以通过request.getHeader("referer");方式来实现登录/注册后返回进入登录或注册页面前的页面

举例:

java 代码

/**

* 进入到登录页面

* @param mapping

* @param form

* @param request

* @param response

* @return

*/

public ActionForward loginview(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) {

//登录后跳转回进来的页面,如果进来之前的页面是登录和退出,则登录后跳转到首页

String pagefrom = request.getHeader("referer");

if(pagefrom.indexOf("method=login")>0 || pagefrom.indexOf("method=logout")>0)

{

pagefrom = pagefrom.substring(0,pagefrom.lastIndexOf("/")+1);

}

request.setAttribute("pagefrom", pagefrom);

saveToken(request);

User object = null;

try {

object = entityClass.newInstance();

} catch (InstantiationException e) {

log.error(e);

} catch (IllegalAccessException e) {

log.error(e);

}

initForm(form, request, object);

return mapping.findForward(LOGINVIEW);

}

在登录页面中设置hidden元素:

登录页面部分代码

<html:form action="/userm.do" focus="loginname" styleClass="u_login_form" onsubmit="return validateUserForm(this)">

<input type="hidden" name="method" value="login"/>

<input type="hidden" name="pagefrom" value="${ pagefrom }"/>

<input type="hidden" name="name" value="name"/>

<input type="hidden" name="mail" value="yahaitt@163.com"/>

<div class="l"><img src="${css}/images/login_icon_01.gif" />div>

<div class="l">

<html:text property="loginname" styleClass="text"/><br />

<html:password property="password" styleClass="text"/><br />

<%@ include file="/commons/messages.jsp" %>

div>

<div class="l"><html:img src="${css}/images/login_icon_02.gif" onclick="if(validateUserForm(document.userForm)) document.userForm.submit();"/>div>

<div class="c">div>

html:form>

<html:javascript formName="userForm" staticJavascript="false" dynamicJavascript="true" cdata="false"/>

<script type="text/javascript" src="${ctx}/scripts/validator.jsp">script>

根据登录页面中的pagefrom元素的值,在登录成功后跳转到该值对应的页面

登录代码:

java 代码

/**

* 登录

* @param mapping

* @param form

* @param request

* @param response

* @return

*/

public ActionForward login(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) {

String pagefrom = request.getParameter("pagefrom");

request.setAttribute("pagefrom", pagefrom);

if (isCancelled(request))

return list(mapping, form, request, response);

if (!isTokenValid(request)){

saveDirectlyError(request, "重复提交");

return mapping.findForward(LOGINVIEW);

}

// resetToken(request);

// run validation rules on this form

ActionMessages errors = form.validate(mapping, request);

if (!errors.isEmpty()) {

saveErrors(request, errors);

refrenceData(request);

return mapping.findForward(LOGINVIEW);

}

User object = doNewEntity(form, request);

initEntity(form, request, object);

User user = userManagerCommon.checkPassword(object.getLoginname(), object.getPassword());

if(null==user)

{

errors.add("password",new ActionMessage("user.missing",object.getPassword()));

saveErrors(request, errors);

return mapping.findForward(LOGINVIEW);

}

SessionUser.saveSession(request,user);

try {

response.sendRedirect(pagefrom);

return null;

} catch (IOException e) {

e.printStackTrace();

}

return mapping.findForward(INDEX);

}

第48行的代码就实现了跳转。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐