Problem z pobraniem identyfikatora użytkownika.

0

Witam. Mam po zalogowaniu administratora mam stronę, z poziomu, której mogę przejść do edycji wszystkich kont administratorów. Jednak zależałoby mi aby na liście, którą mogę edytować zostało pominięte konto zalogowanego administratora. I mam problem jak to zrobić. Mój panel admina:

                            <p:menu styleClass="selection">
                                <p:menuitem action="#{userMB.adminList()}" value="Admini" icon="ui-icon-triangle-1-e"/>
                            </p:menu>

Metoda adminList() służy do nawigacji:

    public String adminList() {
        return "adminList";
    }

Kiedy ją wywołamy to przechodzimy do strony z listą adminów: adminList:

        <navigation-case>
            <from-outcome>adminList</from-outcome>
            <to-view-id>/protected/admin/adminList.xhtml</to-view-id>
            <redirect/>
        </navigation-case>

na której mamy tabelę:

<p:dataTable styleClass="table" value="#{userMB.allAdmins}" var="admin" paginator="true" rows="15" rowKey="#{admin.id}" selection="#{userMB.user}" selectionMode="single"  >

Tabela jest wypełniana przez wywołanie metdoy allAdmins():

    public List<User> getAllAdmins() {
        return userDao.findAllAdmins();
    }

metoda z dao:

    @Override
    public List<User> findAllAdmins() {
        Query q = em.createQuery("SELECT u FROM User u WHERE u.role = 'admin'");
        List<User> users = q.getResultList();
        return users;
    }

I tutaj mój problem skąd wziąć ten swój id. Jeśli udało by mi się go w jakiś sposób pobrać to wtedy zedytowałbym swoje zapytanie w metodze

findAllAdmins()

np. na: "SELECT u FROM User u WHERE u.role = 'admin' where u.id <> 'moje ID'"


Ale nie wiem jak się dobrać do tego Id, jak je przekazać do metody w beanie JSFa 
```java
getAllAdmins()

Nie mam bardzo jak przekazać tego parametru...

Dodam jeszcze bo może to pomoże, że w czasie trwania sesji użytkownika mam beana, który żyje całą sesję loginMB i w nim przechowywane dane aktualnie zalogowanego użytkownika, więc z tego można by ewentualnie też pobrać id, ale też nie przychodzi mi do głowy jak.

1

Wstrzyknij sobie do tego beana z getAllAdmins() beana z informacją o userze przez http://docs.oracle.com/javaee/6/api/javax/faces/bean/ManagedProperty.html ?

0

Tak niestety nie da rady. Bo bean user jest tworzony wcześniej niż bean login.

1

można też zapisać po prostu do sesji nazwe zalogowane usera, a poźniej w razie potrzeby ją wyciągać

0
Swr napisał(a):

można też zapisać po prostu do sesji nazwe zalogowane usera, a poźniej w razie potrzeby ją wyciągać

Zrobiłem coś takiego i działa.
W moim loginbeanie jeśli logowanie się powiodło zapisałem atrybut:

            FacesContext facesContext = FacesContext.getCurrentInstance();
            HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true);
            session.setAttribute("myId", user.getId());

a potem w metodzie getAllAdmins w userbeanie go pobrałem:

        Integer myId;
        FacesContext facesContext = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true);
        myId = (Integer) session.getAttribute("myId");
        return userDao.findAllAdmins(myId);

potem przekazałem do metody find i w zapytaniu wykorzystałem id aby pominęło mnie w wyświetlaniu listy użytkowników.

O takie coś chodziło?

1 użytkowników online, w tym zalogowanych: 0, gości: 1