【问题标题】:Spring Bean Session Scope for currentUsercurrentUser 的 Spring Bean 会话范围
【发布时间】:2012-10-31 06:22:39
【问题描述】:

我最近刚开始在大学里使用 Spring,因此我仍然很迷茫。目前我们正在尝试编写一个几乎可以复制涂鸦的应用程序。

我们已经设法构建了一个 login.jsp,它实际上验证了针对我们的 h2 数据库的登录,然后重定向到所有可用投票的列表。现在我们希望能够从会话范围中获取 currentUser 以显示在右上角,并用于进一步的操作以及用户的签名。

到目前为止,我已经编辑了我的 spring-config.xml:

    <!-- Session Scope -->
<bean id="userInfo" class="de.nordakademie.iaa.nakdate.sessionbeans.UserInfo" scope="session">
</bean>

那我放了这个

<p align="right">%{#userInfo.username}</p>

进入 header.jsp,它在每个页面上都可见,即使是没有用户登录的第一页。这是一个聪明的方法吗?它甚至可以工作吗?

最后我做了一个 UserInfo.java 如下:

package de.nordakademie.iaa.nakdate.sessionbeans;

public class UserInfo {
public String username;

public UserInfo(){
    this.username = "Unregistered User";
}

}

我还将在这里发布我们的登录操作:

package de.nordakademie.iaa.nakdate.action;

import java.util.List;

import com.opensymphony.xwork2.ActionSupport;

import de.nordakademie.iaa.nakdate.model.User;
import de.nordakademie.iaa.nakdate.service.UserService;

public class LogInUserAction extends ActionSupport {
private static final long serialVersionUID = 3734334931859908102L;
private transient UserService userService;
private transient User user;
private String email;
private String password;

@Override
public String execute() throws Exception {
    List<User> users = userService.loadAll();
    for (User currentUser : users) {
        if (currentUser.getEmail().equals(getEmail())) {
            if (currentUser.getPassword().equals(getPassword())) {
                return SUCCESS;
            }
        }
    }
    addActionError(getText("E-Mail / Passwort falsch!"));
    return ERROR;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public UserService getUserService() {
    return userService;
}

public void setUserService(UserService userService) {
    this.userService = userService;
}

public User getUser() {
    return user;
}

public void setUser(User user) {
    this.user = user;
}

}

如果有人能帮忙解决这个问题,我将不胜感激。非常感谢!

编辑: 我刚刚使用了调试标签,发现我的会话是空的。我需要做什么才能在会话中实际填写一些内容?

【问题讨论】:

    标签: spring session login scope


    【解决方案1】:

    我能想到的方法有两种: 首先是在jsp中添加一个model属性并访问model属性,这样:

    在您的控制器中:

    @Controller
    public class MyController{
    
        @Autowired Userinfo userInfo;
    
        @RequestMapping
        public String myMethod(Model model){
            model.addAttribute("userInfo", userInfo);
            ....
        }
    

    那你可以在jsp中参考这个:

    ${userInfo.name}
    

    第二种方法,不幸的是没有记录的方法是以这种方式引用作用域bean:

    ${sessionScope['scopedTarget.userInfo'].name}
    

    来自这里:http://digitaljoel.nerd-herders.com/2010/11/01/accessing-spring-session-beans-in-jsp/

    【讨论】:

    • 我不太清楚你所说的控制器是什么意思。我确实有一个 UserServiceImpl 和一个 UserAction。我到底应该把控制器放在哪里?
    • 哦,我以为你使用的是 Spring-MVC,现在我发现你没有使用 Spring MVC - 然后你可以使用第二种方法,使用 ${sessionScope['scopedTarget.userInfo'].name} 引用它
    • 好的,我在我的jsp中试过了,但是标签不存在。使用调试标签,我可以看到我的会话是空的。我需要做什么来填补我的会话?
    • 尝试在 web.xml 中添加 org.springframework.web.filter.RequestContextFilter 作为过滤器,或者可能是更好的过滤器 - 在 web.xml 中添加此侦听器 - org.springframework.web.context.request.RequestContextListener
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 2011-07-05
    相关资源
    最近更新 更多