0 امتیاز
قبل در برنامه نویسی توسط (32 امتیاز)
برچسب گذاری دوباره قبل توسط

باسلام

به چه شکل می توان یک session  در JSF 2 ساخت زمانی که بر دکمه submit کلیک می شود؟

1 پاسخ

+1 امتیاز
قبل توسط (45 امتیاز)

سلام. نیازی نیست شما خودتون شخصا اقدام به ساختن 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";
    }

    // ...
}

 

سوالات مشابه

0 امتیاز
1 پاسخ 493 بازدید
0 امتیاز
1 پاسخ 418 بازدید
سوال شده 5 سال قبل در برنامه نویسی توسط samaz (0 امتیاز)
+2 امتیاز
3 پاسخ 1.6هزار بازدید
0 امتیاز
0 پاسخ 235 بازدید
سوال شده 7 سال قبل در برنامه نویسی توسط crusader (97 امتیاز)
0 امتیاز
1 پاسخ 1.6هزار بازدید
0 امتیاز
1 پاسخ 435 بازدید
0 امتیاز
1 پاسخ 316 بازدید
+1 امتیاز
1 پاسخ 350 بازدید
0 امتیاز
1 پاسخ 413 بازدید
0 امتیاز
0 پاسخ 189 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط tashtboland (2.2هزار امتیاز)
...