我有一个登录界面,我有一个带有用户名和密码字段的简单表格。成功登录尝试后,我想将用户存储在会话中并重定向到主页。 loginUser方法是LoginResource类的一部分
@POST
public View loginUser(@FormParam("user") String username, @FormParam("pass") String password, @Context HttpServletRequest req)
{
LoginService ls = new LoginService();
User user = ls.login(username, password);
if(user == null)
return new LoginView();
else
{
req.setAttribute("appUser", user);
req.getSession().setAttribute("appUser", user);
return new HomeView();
}
}
HomeView类:
public class HomeView extends View
{
public HomeView()
{
super("home.ftl");
}
}
Freemarker template home.ftl:
<html>
<head>
</head>
<body>
<#if appUser??>
<h1>Welcome, ${appUser.username}!</h1>
<#else>
AppUser is not found in the session
</#if>
</body>
</html>
扩展Service的类的run()方法:
@Override
public void run(Configuration configuration, Environment environment) throws Exception {
//setting session handler
environment.setSessionHandler(new SessionHandler());
environment.addResource(new LoginResource());
}
问题在于,当我成功登录尝试时,似乎我的用户未保存在会话中。不知道如何解决这个问题。
答案 0 :(得分:3)
问题是您没有将会话中的对象传递给freemarker模板:您必须将User传递给HomeView。
请将您的HomeView更改为
public class HomeView extends View
{
private User user;
public HomeView(User user)
{
super("home.ftl");
this.user = user;
}
public User getUser() {
return user;
}
}
并在您的freemarker模板中将其引用为$ {user.username}。
希望它可以帮助你。
再见 皮耶罗