سلام. نیازی نیست شما خودتون شخصا اقدام به ساختن session بکنید بلکه خود jsf مدیریت session رو بر عهده داره و هنگامی که اولین درخواست به سرولت هدایت میشه یا یک session زمانش تموم میشه به ترتیب اعمال ایجاد و حذف session انجام میشه.
اما برای ذخیره سازی اطلاعات کاربر 2 حالت وجود داره. اول اینکه اطلاعات کاربر که در قالب یک کلاس مثل User تعریف شده رو به sessionMap اضافه کنید(بهتره اینم بگم که sessionMap یه آرایه Map هست و سرولت کانتینر برای هر session ایجاد شده یک نمونه از این آرایه میسازه و برای مدیریت داده های کاربر از این آرایه استفاده میکنه).
بنابراین فرض کنیم که یک کلاس لاگین داریم و موقعی که روی دکمه submit کلیک میشه متد login فراخوانی میشه. نمونه کد به این شکل هست:
@ManagedBean
@RequestScoped
public class LoginController {
private String username;
private String password;
@EJB
private UserService userService;
public String login() {
User user = userService.find(username, password);
FacesContext context = FacesContext.getCurrentInstance();
if (user == null) {
context.addMessage(null, new FacesMessage("Unknown login, try again"));
username = null;
password = null;
return null;
} else {
context.getExternalContext().getSessionMap().put("user", user);
return "userhome?faces-redirect=true";
}
}
public String logout() {
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
return "index?faces-redirect=true";
}
// ...
}
راه حل دوم مشابه همین هست منتها بجای قرار دادن اطلاعات داخل sessionMap یک کلاس مجزا با محدوده زندگی session تعریف میکینم و با استفاده از ManagedProperty اون کلاس رو به داخل کلاس LoginController تزریق میکنیم.
بنابراین همچین چیزی داریم:
@ManagedBean
@RequestScoped
public class LoginController {
private String username;
private String password;
@EJB
private UserService userService;
@ManagedProperty("#{sessionBean}")
private SessionBean sessionBean;
public String login() {
User user = userService.find(username, password);
FacesContext context = FacesContext.getCurrentInstance();
if (user == null) {
context.addMessage(null, new FacesMessage("Unknown login, try again"));
username = null;
password = null;
return null;
} else {
/*
* inja farz mikonim too hamoon class SessionBean ke ba scope session
* hast, ye property be esme userInfo tarif shode va ma inja oono set mikonim.
*/
sesseionBean.setUserInfo(user);
return "userhome?faces-redirect=true";
}
}
public String logout() {
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
return "index?faces-redirect=true";
}
// ...
}