cx520xj
2012-07-24 16:30 阅读 229
已采纳

struts2+json

<action name="IndexLogin" class="action.LoginAction" method="IndexLogin">
      <result name="error" type="json"></result>
      <result name="query" >/index.jsp</result>
  </action>

 

页面jquery请求进入IndexLogin的方法,我想验证用户名和密码,如果错误就是ajax的弹出错误提示信息,如果正确是否能用struts2的<result name="query" >/index.jsp</result>直接跳转连接或者其他什么办法能再struts2中直接跳转,而不需要回到页面再使用window.location = "./index.jsp";

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

10条回答 默认 最新

  • 已采纳
    iteye_5246 iteye_5246 2012-07-24 23:37

    帮人帮到底,
    把所有demo代码贴出来
    =====action处理类
    [code="java"]
    public String IndexLogin() {
    String userName=ServletActionContext.getRequest().getParameter("userName");//userName
    if(userName!=null&&!"".equals(userName))
    {
    ServletActionContext.getRequest().setAttribute("userName", userName);
    return "list";
    }else
    {
    return "login";
    }
    }
    [/code]
    =====struts.xml
    [code="xml"]

    /login.jsp
    /list.jsp

    [/code]

    ==首页index.jsp

    [code="html"]
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">


    My JSP 'index.jsp' starting page $(document).ready(function() { $('#demo1').click(function() { var url="/Demo/demoPrj/IndexLogin.action"; $("#workspace").load(url,function(){ }); }); });

    -----------index.jsp



    [/code]

    ====login.jsp
    [code="html"]

    $('#demo2').click(function() { var userName=$("#userName").val(); var url="/Demo/demoPrj/IndexLogin.action?userName="+userName; $("#workspace").load(url); });



    [/code]

    ==list.jsp
    [code="html"]
    <%@ page language="java" pageEncoding="utf-8"%>

    login UserName:${userName }

    [/code]

    //上述demo全部异步提交,流程,加载index。jsp。点击【载登录页面】按钮加载登录页面,加载完毕后,输入用户名提交按钮,不刷新页面,加载登录成功的list页面显示登录的用户
    完整demo,需要请留联系方式
    这个demo完全 ajax,从加载登录页面,到加载登录成功的页面
    整个流程不刷新页面没有location。href="***.jsp";

    希望能帮上忙

    点赞 评论 复制链接分享
  • iteye_5246 iteye_5246 2012-07-24 16:39

    ajax试图后台应该返回
    页面输出
    String fullContentType = "application/json" + ";charset=" + "UTF-8";
    response.setContentType(fullContentType);
    try {
    response.getWriter().write(json);
    response.getWriter().flush();
    } catch (Exception e) {
    throw new RuntimeException(e.getMessage(), e);
    }
    return null;
    推荐使用jquery -validate 插件提供remote的验证方式,适合像用户名重复
    email重发验证
    希望能帮上忙

    点赞 评论 复制链接分享
  • iteye_5246 iteye_5246 2012-07-24 17:10

    那一样可以,例如:

    public String LoginAction() {

    if(true)//模拟登录成功
    {
        return query;//query 对应登录 成功的页面
    }else
    {
    str1.append("\"date\":");
        String json="{\"message":\"密码或用户名错误,请重新输入!\"}";
        String fullContentType = "application/json" + ";charset=" + "UTF-8";
        response.setContentType(fullContentType);
        try {
            response.getWriter().write(json);
            response.getWriter().flush();
        } catch (Exception e) {
            throw new RuntimeException(e.getMessage(), e);
        }
        return null;
    }
    

    }
    jsp页面就提交一个表单,如果登录成功就跳登录成功页面了
    如果没有,那就是ajax请求

    点赞 评论 复制链接分享
  • iteye_5246 iteye_5246 2012-07-24 17:38

    哥们,我刚做了个测试发现,会把json数据输出到页面上的。
    我错了。

    点赞 评论 复制链接分享
  • weixin_42608382 weixin_42608382 2012-07-24 19:02

    :D 只能告诉你不可能,用异步去验证。不会产生你想要的重定向效果!~~

    点赞 评论 复制链接分享
  • tianma630 tianma630 2012-07-24 20:07

    使用2个action,一个是验证的action,一个是跳转的action,第一个action使用ajax方式,如果验证错误,则返回错误信息,如果验证成功跳转到第二个action
    提示:第一个action用ajax方式提交,第二个action用表单的正常方式submit

    点赞 评论 复制链接分享
  • qufulin qufulin 2012-07-24 21:04

    可以将正确返回的内容用js写入到dom 中, document.write(正确的内容html);

    点赞 评论 复制链接分享
  • iteye_5246 iteye_5246 2012-07-24 21:13

    1.要么就重定向,
    2.要么登录有使用异步

    点赞 评论 复制链接分享
  • iteye_5246 iteye_5246 2012-07-24 22:42

    jquery ajax 可以做到异步提交
    [code="java"]
    public String IndexLogin() {
    String userName=ServletActionContext.getRequest().getParameter("userName");//userName
    if(userName!=null&&!"".equals(userName))
    {
    return "list";
    }else
    {
    return "login";
    }
    }
    [/code]
    =====struts.xml
    [code="xml"]

    /login.jsp
    /list.jsp

    [/code]

    //其中 $("#workspace").load 加载后台返回login.jsp
    ====index.jsp
    [code="html"]

    $(document).ready(function() { $('#demo1').click(function() { var url="/Demo/demoPrj/IndexLogin.action"; $("#workspace").load(url,function(){ }); }); });


    -----------index.jsp




    [/code]

    ==login.jsp
    [code="html"]

    [/code]

    //点击加载登录页面加载登录页面,异步提交请求,把返回的jsp视图加载在当前页面上,浏览器状态没有加载进度。是一个异步加载视图过程

    点赞 评论 复制链接分享
  • at1943 at1943 2012-07-24 23:33

    看来大多数人不用json视图



    返回的对象名称,会自动转为json

    /index.jsp

    点赞 评论 复制链接分享

相关推荐