2

spring mvc を使用して Web サイトを作成しています。サインアップに関連するすべてのリクエストを処理する SignupController を追加しました。ユーザーがサインアップしたら、 @Scope("session") を使用してそれをセッションに追加しています。以下は SignupController コードです。

SignupController.java

@Controller
@Scope("session")
public class SignupController {

@Autowired
SignupServiceInter signUpService;

private static final Logger logger = Logger.getLogger(SignupController.class);

private String sessionUser;

@RequestMapping("/SignupService")
public ModelAndView signUp(@RequestParam("userid") String userId, 
    @RequestParam("password") String password,@RequestParam("mailid") String emailId){

    logger.debug("  userId:"+userId+"::Password::"+password+"::");

    String signupResult;

    try {

        signUpService.registerUser(userId, password,emailId);
        sessionUser  = userId; //adding the sign up user to the session
        return new ModelAndView("userHomePage","loginResult","Success"); 
         //Navigate to user Home page if everything goes right

    } catch (UserExistsException e) {
        signupResult = e.toString();
        return new ModelAndView("signUp","loginResult", signupResult); 
         //Navigate to signUp page back if user does not exist
    }
}
 }

「sessionUser」変数を使用して、サインアップしたユーザー ID を保存しています。私の理解では、コントローラーに @Scope("session") を使用すると、すべてのインスタンス変数が HttpSession に追加されます。その理解により、userHomePage.jsp でこの「SessionUser」にアクセスしようとしました。

userHomepage.jsp

Welcome to <%=session.getAttribute("sessionUser")%>

しかし、それはnullをスローします。

私の質問は、mvc コントローラーで @Scope("session") を使用して保存された jsp ページでセッション変数の値を使用する方法です。

注: 私の回避策は、署名されたユーザー ID を ModelAndView を介して jsp ページに渡すことですが、ページ間でこのような値を渡すと、QueryStrings 日を使用してページ間で状態を管理するようになります。

4

2 に答える 2

2

コントローラーに @Scope("session") を指定すると、Spring はすべてのセッションにコントローラーの一意のインスタンスが存在することを保証するようになり、sessionUser のようなセッション固有の状態をインスタンス変数として保持できるようになります。

ただし、変数を UI に公開するには、その変数がモデル/セッション属性の一部である必要があります。 @ModelAttribute("sessionUser") または @SessionAttribute("sessionUser") を使用してそれを行うことができます。

@Controller
@SessionAttribute("sessionUser")
public class SignupController {
@RequestMapping("/SignupService")
public ModelAndView signUp(@RequestParam("userid") String userId, 
    @RequestParam("password") String password,@RequestParam("mailid") String emailId,  Model model){
...
    try {

        signUpService.registerUser(userId, password,emailId);
        sessionUser  = userId; //adding the sign up user to the session
        model.addAttribute("sessionUser", sessionUser);

        return new ModelAndView("userHomePage","loginResult","Success"); 
         //Navigate to user Home page if everything goes right
       ....
}
}
于 2012-08-28T01:52:56.950 に答える
0

私はいつもjsfを使用しているので、jspとのSpring統合を試したことはありませんが、これを試してみます。

まず、関心のあるプロパティのゲッターとセッターを(コントローラーに)追加します。

@Controller
@Scope("session")
public class SignupController {

...

private String sessionUser;

public void setSessionUser(String sessionUser) {
    this.sessionUser = sessionUser;
}

public String getSessionUser() {
    return this.sessionUser;
}

...

次に、次のようにjspで呼び出します。

Welcome to ${session.sessionUser}

それはあなたのために働きますか?:)そうでない場合、私は試してみます:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...
Welcome to <c:out value="${session.sessionUser}" />
于 2012-08-27T21:35:49.617 に答える