NutzCN Logo
问答 练习demo session在jsp取不到值问题,求指导
发布于 2082天前 作者 wx_2jk6i7mpius707s625cs 1857 次浏览 复制 上一个帖子 下一个帖子
标签:
@At
	public Object  GetUser(@Param("username")String name,HttpSession session) throws Exception {
		User user = userDao.SelectUser(name);
		logger.info("用户信息"+user);
		if (user == null) {
            return false;
        } else {
            session.setAttribute("me", user);
            logger.info("me"+session.getAttribute("me"));
            return true;
        }
	}
控制台日志
019-04-11 10:59:08,678 net.wendal.nutzbook.action.UserAction.GetUser(UserAction.java:43) INFO  - 用户信息User [id=0, VipId=1778762, VipNumber=null, msterID=null, name=甘甘, QQ=null, Phone=18810503492, password=123456, Sex=男, CreateOrgId_Id=null, CreateOrg_Name=北京慈云寺店, FBirthday=1998-09-09T00:00:00, VipCreateDate=null, createTime=Thu Apr 11 10:59:08 CST 2019, updateTime=Thu Apr 11 10:59:08 CST 2019]
2019-04-11 10:59:08,695 net.wendal.nutzbook.action.UserAction.GetUser(UserAction.java:48) INFO  - meUser [id=0, VipId=1778762, VipNumber=null, msterID=null, name=甘甘, QQ=null, Phone=18810503492, password=123456, Sex=男, CreateOrgId_Id=null, CreateOrg_Name=北京慈云寺店, FBirthday=1998-09-09T00:00:00, VipCreateDate=null, createTime=Thu Apr 11 10:59:08 CST 2019, updateTime=Thu Apr 11 10:59:08 CST 2019]
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>NutzBook demo</title>
<!-- 导入jquery -->
<script type="text/javascript" src="http://lib.sinaapp.com/js/jquery/2.0.3/jquery-2.0.3.min.js"></script>
<!-- 把user id复制到一个js变量 -->
<script type="text/javascript">
    var me = '<%=session.getAttribute("me") %>';
    var base = '${base}';
    $(function() {
        $("#login_button").click(function() {
            $.ajax({
                url : base + "/user/GetUser",
                type: "POST",
                data:$('#loginForm').serialize(),
                error: function(request) {
                    alert("Connection error");
                },
                dataType:"json",
                success: function(data) {
                    alert(data);
                    if (data == true) {
                        alert(me);
                        location.reload();
                    } else {
                        alert("登陆失败,请检查账号密码")
                    }
                }
            });
            return false;
        });
        if (me != "null") {
            $("#login_div").hide();
            $("#userInfo").html("您的Id是" + me);
            $("#user_info_div").show();
        } else {
            $("#login_div").show();
            $("#user_info_div").hide();
        }
    });
</script>
</head>
<body>
<div id="login_div">
    <form action="#" id="loginForm" method="post">
        用户名 <input name="username" type="text" value="admin">
        <button id="login_button">提交</button>
    </form>
</div>
<div id="user_info_div">
    <p id="userInfo"></p>
    <a href="${base}/user/logout">登出</a>
</div>
</body>
</html>
64 回复

jsp里面的alter(me)是null

缺@Ok("json:full")

@At
	@Ok("json:full")
	public Object  GetUser(@Param("username")String name,HttpSession session) throws Exception {
		User user = userDao.SelectUser(name);
		logger.info("用户信息"+user);
		if (user == null) {
            return false;
        } else {
            session.setAttribute("me", user.getPhone());
            logger.info("me"+session.getAttribute("me"));
            return true;
        }
	}
2019-04-11 11:11:01,448 net.wendal.nutzbook.action.UserAction.GetUser(UserAction.java:44) INFO  - 用户信息User [id=0, VipId=1778762, VipNumber=null, msterID=null, name=甘甘, QQ=null, Phone=18810503492, password=123456, Sex=男, CreateOrgId_Id=null, CreateOrg_Name=北京慈云寺店, FBirthday=1998-09-09T00:00:00, VipCreateDate=null, createTime=Thu Apr 11 11:11:01 CST 2019, updateTime=Thu Apr 11 11:11:01 CST 2019]
2019-04-11 11:11:01,449 net.wendal.nutzbook.action.UserAction.GetUser(UserAction.java:49) INFO  - me18810503492
2019-04-11 11:11:09,331 org.nutz.mvc.impl.UrlMappingImpl.get(UrlMappingImpl.java:101) DEBUG - Found mapping for [GET] path=/user/logout : UserAction.logout(UserAction.java:56)
2019-04-11 11:11:09,331 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:165) DEBUG - Get 'userAction'<class net.wendal.nutzbook.action.UserAction>

是ajax那个alert?

先jsp渲染, 然后才调用GetUser, 当然是null

对的,data是true,但是me是空的导致不能走下面逻辑

jsp渲染比ajax要早的

我建议你还是看一遍nutzbook吧, 即网页右上角的新手入门

我就是在那走到这里的。页面也是那儿的。

我是做到登录登出方法,除了GetUser()是我的外其他的没变,如果那个地方有错误期望维护一下。

session的me属性是login方法的事,别的方法别动他,只管取

是这样下面这段代码不走所以导致我联系demo登录成功不跳页面

if (me != "null") {
            $("#login_div").hide();
            $("#userInfo").html("您的Id是" + me);
            $("#user_info_div").show();
        } else {
            $("#login_div").show();
            $("#user_info_div").hide();
        }

也就是说我的登出按钮还没有show出来

上述js代码里面, me的值是??

2019-04-11 11:11:01,449 net.wendal.nutzbook.action.UserAction.GetUser(UserAction.java:49) INFO  - me18810503492

前端, if判断之前, 打印一下console.me()

控制台打印空null

var me = '<%=session.getAttribute("me") %>';
var base = '${base}';
$(function() {
$("#login_button").click(function() {
$.ajax({
url : base + "/user/GetUser",
type: "POST",
data:$('#loginForm').serialize(),
error: function(request) {
alert("Connection error");
},
dataType:"json",
success: function(data) {
alert(data);
if (data == true) {
//location.reload();
} else {
alert("登陆失败,请检查账号密码")
}
}
});
// alert(me);
return false;
});
console.info(me)
if (me != "null") {
$("#login_div").hide();
$("#userInfo").html("您的Id是" + me);
$("#user_info_div").show();
} else {
$("#login_div").show();
$("#user_info_div").hide();
}
});

```

 var me = '<%=session.getAttribute("me") %>';
 var base = '${base}';
 $(function() {
 $("#login_button").click(function() {
 $.ajax({
 url : base + "/user/GetUser",
 type: "POST",
 data:$('#loginForm').serialize(),
 error: function(request) {
 alert("Connection error");
 },
 dataType:"json",
 success: function(data) {
 alert(data);
 if (data == true) {
 //location.reload();
 } else {
 alert("登陆失败,请检查账号密码")
 }
 }
 });
 // alert(me);
 return false;
 });
 console.info(me)
 if (me != "null") {
 $("#login_div").hide();
 $("#userInfo").html("您的Id是" + me);
 $("#user_info_div").show();
 } else {
 $("#login_div").show();
 $("#user_info_div").hide();
 }
 });

如果me == "null", 那么 me != "null" 怎么会为true, 这不对嘛

session.setAttribute("me", user);
logger.info("me"+session.getAttribute("me"));这里赋值了哇

我晕, 你别再GetUser方法里面做任何me操作了!!!!

@At
	@Ok("json:full")
	public Object  GetUser(@Param("username")String name,HttpSession session) throws Exception {
		User user = userDao.SelectUser(name);
		logger.info("用户信息"+user);
		if (user == null) {
            return false;
        } else {
            session.setAttribute("me", user.getPhone());
            logger.info("me"+session.getAttribute("me"));
            return true;
        }
	}

jsp先再服务器渲染的, 然后浏览器才执行js,

index.jsp --> 得到session的me(是null) --> 渲染完成 --> 浏览器加载页面 --> 执行js --> 发起ajax

最后执行ajax我在ajax alter为什么是空的呢

因为你没有先登录

js的$是开始执行代码的呀,响应回页面数据后按道理就是ajax执行完Func 之后session 是有值的吧。

那个js的me变量在jsp渲染完成之后就没赋值过,注意是js的变量

java里面的值有没有变,不会影响js!

名白了,但是我们好像又转回来了,ajax执行完毕session应该是有值了不在是null才对。

后端java的session me 有值, 但不会反应在页面上, 因为jsp渲染完就是html, 不会跟着后台变!!!

代码里面写的是为什么一开始加载页面登录页面没有立即消失是因为me不是null.

执行顺序搞清楚啊

是null,那么怎么搞哇。

登录那个页面贴一下

页面登录成功登录的DIV影藏,然后出现用户的信息和登出div这样。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>NutzBook demo</title>
<!-- 导入jquery -->
<script type="text/javascript" src="http://lib.sinaapp.com/js/jquery/2.0.3/jquery-2.0.3.min.js"></script>
<!-- 把user id复制到一个js变量 -->
<script type="text/javascript">
    var me = '<%=session.getAttribute("me") %>';
    var base = '${base}';
    $(function() {
        $("#login_button").click(function() {
            $.ajax({
                url : base + "/user/GetUser",
                type: "POST",
                data:$('#loginForm').serialize(),
                error: function(request) {
                    alert("Connection error");
                },
                dataType:"json",
                success: function(data) {
                    alert(data);
                    if (data == true) {
                        location.reload();
                    } else {
                        alert("登陆失败,请检查账号密码")
                    }
                }
            });
                       // alert(me);
            return false;
        });
        console.info(me)
        if (me != "null") {
            $("#login_div").hide();
            $("#userInfo").html("您的Id是" + me);
            $("#user_info_div").show();
        } else {
            $("#login_div").show();
            $("#user_info_div").hide();
        }
    });
</script>
</head>
<body>
<div id="login_div">
    <form action="#" id="loginForm" method="post">
        用户名 <input name="username" type="text" value="">
        <button id="login_button">提交</button>
    </form>
</div>
<div id="user_info_div">
    <p id="userInfo"></p>
    <a href="${base}/user/logout">登出</a>
</div>
</body>
</html>

那你应该让GetUser返回User

所以你根本没有走login方法, 渲染jsp的时候me肯定是null

返回user我试过没问题但是登出就有问题了

来, 你觉得这个页面里面的js的me变量, 赋值了多少次

我希望是三次,但是好像不是

就一个me = XXX 怎么可能有3次呢?

location.reload();我之前以为是这个把me给刷没了

你是以为入口方法改了java的me变量, 页面js的me变量也会跟着改

是的因为me是打session取值的

var me = '<%=session.getAttribute("me") %>';
var base = '${base}';一开始我以为把这一段放再后面获取可以取到但是无果

GetUser方法不要设置me属性, 只做获取

@At
@Ok("json:full")
public User GetUser(@Param("me")User me) {
     return me;
}

再吐槽一下, Java的方法名不要大写开头呀

那么session取不到me的吧

还是说我在js里面在给session复制?

js和java不是互通的,别想js改java变量,java改js变量这类东西

如果返回user,跟页面的逻辑冲突了,data编程了user对象。loginOut()也只能单纯跳页面了

怎么就跟页面逻辑冲突了? 你的GetUser方法还想着做login的事?

名字换了一下其实就是login

我是要返回true或者false走页面逻辑的。查询用户的信息要放在session里面能让取到展示的。

名字改一下就变成login,这思路厉害了

	@At
	@Ok("json:full")
	public Object  login(@Param("username")String name,HttpSession httpSession) throws Exception {
		boolean b = userDao.SelectUser(name);
		httpSession.setAttribute("me", name);
		return b;
		
	}

我知道什么原因了,我的登出不对好像登出了之后虽然页面在登录页面但是Url是http://localhost/nutzbook/user/logout

@At
	@Ok("jsp:/page/user/login/login.jsp")
    public void logout(HttpSession session) {
        session.invalidate();
    }

我在怎么点我的方法是错的都是logout方法虽然后代吗但是打印的都是空的。求解

我改好了,谢谢大佬。

添加回复
请先登陆
回到顶部