求解惑,strust 2 需要点击两次访问才会有返回,是什么原因?

點點灬愛護 发布于 2012/08/05 11:22
阅读 302
收藏 0

访问页面, 这个页面是嵌套在IFrame里面的

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
  <head>
    <title>login.html</title>
   
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
   
    <script type="text/javascript" src="js/jquery-1.7.2.js"></script>
    <script type="text/javascript" src="js/json2.js"></script>
    <script language="JavaScript">   
        function login(){
            $.ajax({
                url: "login.action",   // 提交的页面
                data: $('#login').serialize(), // 从表单中获取数据
                type: "POST",               // 设置请求类型为"POST",默认为"GET"
                datatype:"text",
                error: function(request) {      // 设置表单提交出错
                    alert("表单提交出错,请稍候再试");
                },
                success: function(data) {
                    alert(data);
                    if(data=="admin"){
                        alert("fuck2");
                    }
                   if(data.toString() == "admin")
                   {
                       alert("ok");
                       parent.$("#rightFrame").attr("src", "category/categorylist.html");
                   }
                }
            });
        }
    </script>

  </head>
 
  <body>
    <form id="login">
        name:<input type="text" name="username" />
        pass:<input type="password" name="password" />
        <input type="button" value="submit" onclick="login()"/>
    </form>
  </body>
</html>

Struts 配置文件:

<?xml version="1.0" encoding="UTF-8"?>
    <!-- 指定Struts2配置文件的DTD信息 -->
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
    <!-- Struts2配置文件的根元素 -->
<struts>
    <!-- 配置了系列常量 -->
    <constant name="struts.custom.i18n.resources" value="resource" />
    <constant name="struts.i18n.encoding" value="UTF-8" />
    <package name="default" extends="struts-default">
        <result-types>
            <result-type name="jsonString" class="com.pos.core.common.JSONResultType"></result-type>
        </result-types>
        <!--begin User -->
        <action name="login" class="userAction" method="login">
            <result name="success" type="jsonString"/>
            <result name="fail" type="jsonString" />
        </action>
       
        <action name="logout" class="userAction" method="logout">
            <result name="success" type="jsonString" />
        </action>       
        <!--end User  -->
       
        <!--begin Category -->
        <action name="addCategory" class="categoryAction" method="addCategory">
            <result name="success" type="jsonString" />
        </action>
        <!--end Category -->
       
        <!--begin Good -->
        <action name="addGood" class="goodAction" method="addGood">
            <result name="success" type="jsonString"></result>
        </action>
        <action name="findCategory" class="goodAction" method="findCategory">
            <result name="success" type="jsonString"></result>
        </action>
        <!--end Good -->
    </package>
</struts>

action类的方法:

public String login() throws IOException
    {
        String username = request.getParameter("username").trim();
        String password = request.getParameter("password").trim();
        User user = userService.queryForLogin(username, password);
        if(user != null)
        {
            request.getSession().setAttribute("admin", username);
            request.setAttribute("resultDate", username);
            ServletActionContext.getResponse().setContentType("text/plain,UTF-8");
            ServletActionContext.getResponse().getWriter().write(username);
//            return "success";
        }
        else
        {
            request.setAttribute("resultDate", "login");
//            return "fail";
        }
       
        return null;
    }

 

加载中
0
JFinal
JFinal
会不会是第一次就有返回,只不过是处在延迟时间内呢?
无聊的人们啊
无聊的人们啊
回复 @hdjbeyond : 代码太多,没看完,告诉你一个方法,用FireFox浏览器,左上角,web开发者,web控制台,打开后点击一下那个按钮,看看什么信息。 好就没有用Struts了,现在正在用@Jfinal 感觉很爽 有机会可以试试
JFinal
JFinal
回复 @hdjbeyond : 试试 JFinal 吧,struts2 太厚重了: http://www.oschina.net/p/jfinal
點點灬愛護
點點灬愛護
第一次点,就是没反应。
0
f
flamehazi

你把ajax的异步刷新关闭,再试一下。

$.ajaxSettings.async = false;

因为你第一次点击之后,数据提交到后台,但是因为异步刷新的原因,没有等页面接到返回值,你点击第二下的时候,实际返回的响应可能是第一次点击之后的结果。

返回顶部
顶部