我有一个登录页面login.jsp有一个用户框,一个密码框,对应一个FOMR和一个ACTION。
如:<tr>
            <td width="207" height="45" align="right" valign="bottom" class="STYLE3" style="padding-right:40px;">用户名</td>
            <td width="294" valign="bottom"><html:text property="userName"  maxlength="100" style="width:150px"/>&nbsp;<span class="errorMsg"><html:errors property="userNameNull" bundle="login" /><span></td>
          </tr>
          <tr>
            <td height="45" align="right" valign="bottom" class="STYLE3" style="padding-right:40px;">密&nbsp;&nbsp;码</td>
            <td valign="bottom"><html:password property="passWord" maxlength="100" style="width:150px"/>&nbsp;<span class="errorMsg"><html:errors property="passWordNull" bundle="login" /></span><span class="errorMsg"><html:errors property="userNameOrPasswordError" bundle="login" /></span></td>
          </tr>
html:errors property="userNameNull" bundle="login" />用于用户名为空时返回错误信息
html:errors property="passWordNull" bundle="login" />用于密码为空时返回错误信息
<html:errors property="userNameOrPasswordError" bundle="login" />这个是用户名和密码都不为空提交后,但是在数据库中找不到用户时,即用户名或密码错误 时的返回信息
Action中处理如下:
if(userMge.checkUser(userName,md5.getMD5ofStr(passWord)))
         {
         Map map = userMge.userLogin(userName,md5.getMD5ofStr(passWord));
         //session范围内保存用户信息
         session.setAttribute("userId",(String)map.get("filed1"));
                session.setAttribute("userpost",(String)map.get("filed2"));
                session.setAttribute("username",(String)map.get("filed3"));
                session.setAttribute("password", (String)map.get("filed4"));
             System.out.print("if");
         //从request范围内删除ActionForm Bean
                request.removeAttribute(mapping.getAttribute());
                request.setAttribute("loginMessage", "loginSuccess");
                return (mapping.findForward("userLoginSuccess"));
         }
         else
         {
         System.out.print("else");
         request.removeAttribute(mapping.getAttribute());
         errors.add("userNameOrPasswordError", new ActionMessage("login.userNameOrPassword.inputError"));
                saveErrors(request, errors);
                return (new ActionForward(mapping.getInput()));
         }
用户名密码经过验证不对时,执行else{}但是现在在login.jsp页面我用户密码都不为空,但是是错的,提交一次就提示一次,点N次就可以出来N个错误提示,我只需要一个呀。。这怎么回事?高手帮忙呀。怪!!!!!!!

解决方案 »

  1.   

    怎么清空,request.removeAttribute(mapping.getAttribute()); ???
      

  2.   

    页面上只需写一个
    <html:error/>删除
    <html:errors property="userNameNull" bundle="login" />用于用户名为空时返回错误信息 
    <html:errors property="passWordNull" bundle="login" />用于密码为空时返回错误信息 
    <html:errors property="userNameOrPasswordError" bundle="login" />
      

  3.   

    setAttribute(名字,null)就好了
      

  4.   

    不行呀
     Map map = userMge.userLogin(userName,md5.getMD5ofStr(passWord));
             //if(!userMge.checkUser(userName,md5.getMD5ofStr(passWord)))
             if(map== null){
                    request.removeAttribute(mapping.getAttribute());
             errors.add("userNameOrPasswordError", new ActionMessage("login.userNameOrPassword.inputError"));
                    saveErrors(request, errors);
                    return (new ActionForward(mapping.getInput()));
             }
             //session范围内保存用户信息
             HttpSession session = request.getSession();
         session.setAttribute("userId",(String)map.get("filed1"));
                session.setAttribute("userpost",(String)map.get("filed2"));
                session.setAttribute("username",(String)map.get("filed3"));
                session.setAttribute("password", (String)map.get("filed4"));
             System.out.print("if");
         //从request范围内删除ActionForm Bean
                request.removeAttribute(mapping.getAttribute());
               // request.setAttribute("loginMessage", "loginSuccess");
                return (mapping.findForward("userLoginSuccess"));
    这是一段关键的ACTION不在错在那里。当map为空时返回前台JSP页面时错误信息,你点几次就出现几次,如:
    用户名或密码错误用户名或密码错误用户名或密码错误用户名或密码错误,,,,这是我输入错误的用户名和密码后连点4次出现的提示,可我只需要显示一次呀。怎么回事?
      

  5.   

    谢谢各位。。已经解决...errors.clear();加这个方法