Problem z renderowaniem zawartości strony xhtml po zalogowaniu (JSF+PrimeFaces JSF+Wildfly 12.0+Java 1.8)

Odpowiedz Nowy wątek
2018-08-09 23:49
0

Witam,

Może opiszę sedno problemu (na razie bez bez wklejania kodu, żeby nie zaciemniać), może Ktoś z Was spotkał się z podobną sytuacją w praktyce :

  1. wywołuję stronę logowania xhtml
    .
  2. po wprowadzeniu profilu uruchamia się metoda walidacyjna kontrolera bean-a LoginBean : sprawdza czy user istnieje w bazie danych , profil zgodny
    pobiera pełne dane usera (jako obiekt) z bazy danych etc, jeśli OK to :
    .
  3. wypełniam polami usera wartości pól w klasie pomocniczej BuliderAccount poprzez instancję Obiektu
    BuilderAcccount (konstruktor przyjmujący jako argument obiekt User ) tworzonego w klasie LoginBean () / alternatywnie robię to setterami
    .
  4. sprawdzam loggerem w klasie LoginBean nowo utworzony obiekt BuilderAcccount : pola wskazuja na wartości usera pobrane z bazy danych , więc
    OK
    .
  5. na koniec metoda akcyjna jw. zwraca string = stronę prezentującą konto usera account.xhtml
    .
  6. strona renderuje się za wyjątkiem danych personalnych usera , do których to pól odwołują się poszczególne adnotacje JSF w polach account.xhtml
    np. <h:outputtext value="#{buliderAccount.firstName}" /> itd dla kolejnych pól.

Problem :

Po wywołaniu strony account.xhtml nie są renderowane dane personalne usera.
.
Dlaczego ?

Pzdr.

Pozostało 580 znaków

2018-08-10 00:03
0

Podstawowe pytanie - musisz korzystać z JSF?


Nie pomagam przez PM. Pytania zadaje się na forum.
Jarek R też zadaje takie pytania, ale do tego dorzuca jakiś konkret. Jakąś pomocną uwagę. - jarekczek 2018-08-13 22:47

Pozostało 580 znaków

2018-08-10 08:46
0

Skoro w LoginBean jest tworzony nowy obiekt BuilderAccount to jak go przekazujesz do frontu? Przypisujesz go jakoś do buliderAccount ? Musisz go jakoś wyciągnąć z LoginBean pierw skoro tam został utworzony.

Pozostało 580 znaków

2018-08-10 11:55
0
Kermii napisał(a):

Skoro w LoginBean jest tworzony nowy obiekt BuilderAccount to jak go przekazujesz do frontu? Przypisujesz go jakoś do buliderAccount ? Musisz go jakoś wyciągnąć z LoginBean pierw skoro tam został utworzony.

Właśnie.
Pierwotnie z LoginBean wywoływalem metodę w BuilderAccount , tam tworzył em instancje / ustawiłem settery polami usera , przekazywalem zwrotnie do LoginBean nazwę strony account gdzie była zwracana i wywoływana
.
Strona account się renderowala ale bez wartosci pól usera
.
Wiec zmieniłem sposób i instancjacja następowała w LoginBean ale to też nie działa.
.
Gdzie może być zatem błąd?

Pozostało 580 znaków

2018-08-10 11:57
0
scibi92 napisał(a):

Podstawowe pytanie - musisz korzystać z JSF?

Obecnie już tego nie zmienię.
Ale jakie są przeciwskazania w nauce/ stosowaniu ?

Pozostało 580 znaków

2018-08-10 12:48
0

Sprawdzałeś logi ?

Pozostało 580 znaków

2018-08-10 13:10
0
JavaRookie napisał(a):
  1. strona renderuje się za wyjątkiem danych personalnych usera , do których to pól odwołują się poszczególne adnotacje JSF w polach account.xhtml
    np. <h:outputtext value="#{buliderAccount.firstName}" /> itd dla kolejnych pól.

Skąd jest brane builderAccount? Jak defniujesz to w pliku?

Pozostało 580 znaków

2018-08-10 14:16
0
Kermii napisał(a):

Skąd jest brane builderAccount? Jak defniujesz to w pliku?

builderAccount.(nazwa właściwości) jest brane z klasy BuilderAccount. w której definiuję listę pól właściwych odpowiadających polom usera , który został pozytywnie zwalidowany w klasie LoginBean i przekazany w metodzie do klasy BuilderAccount.
.
Pola outputText #{......} w account.xhtml odwołują się właśnie do pól private w klasie BuilderAccount z adnotacją @ViewScope.
.
Czy to nie wystarczy ?
Trzeba jeszcze coś zdefiniować np. w plikach web.xml, lub faces-config.xml ?

(uczę się, stąd niektóre moje pytania/odpowiedzi mogą się wydawać nieprofesjonalne, nieporadne - proszę o wyrozumienie.... )

edytowany 1x, ostatnio: JavaRookie, 2018-08-10 14:17

Pozostało 580 znaków

2018-08-10 15:50
0

Ale skąd bierzesz instancję klasy BuilderAccount? Sam tworzysz? Bo jeśli tak, to kontener nie rozwiąże poprawnie Twoich wyrażeń #{builderAccount.x} bo nic o tej instancji nie wie.
Może jednak jakiś kod byś pokazał...

Pozostało 580 znaków

2018-08-10 16:42
0
JavaRookie napisał(a):
scibi92 napisał(a):

Podstawowe pytanie - musisz korzystać z JSF?

Obecnie już tego nie zmienię.
Ale jakie są przeciwskazania w nauce/ stosowaniu ?

poza tym że to stara i słaba technologia to żadnych :D
Jak nie jesteś into REST/ JS to lepszy jakiś Spring MVC z thymeleaf, nie ma jakiś udziwnień


Nie pomagam przez PM. Pytania zadaje się na forum.

Pozostało 580 znaków

2018-08-10 16:59
0

Poniżej odpowiednio klasa LoginBean (logowanie, walidacja i wywołanie stromy account.xhtml):

@ManagedBean
@RequestScoped
public class LoginBean implements Serializable, Authorization, UserSessionManager {

private static final String rejectAuthMssg = "student not authorized";

Logger logger = Logger.getLogger(LoginBean.class.toString());

public UserSessionBean getUserSessionBean() {
    return userSessionBean;
}

public void setUserSessionBean(UserSessionBean userSessionBean) {
    this.userSessionBean = userSessionBean;
}

@ManagedProperty("#{userSessionBean}")
private org.primefaces.showcase.view.access.UserSessionBean userSessionBean;

public StudentService getStudentService() {
    return studentService;
}

public void setStudentService(StudentService studentService) {
    this.studentService = studentService;
}

@ManagedProperty(value = "#{studentDatabaseBean}")
private StudentService studentService;

public PasswordEncryptorBeforeDataBaseInput getPasswordEncryptorBeforeDataBaseInput() {
    return passwordEncryptorBeforeDataBaseInput;
}

public void setPasswordEncryptorBeforeDataBaseInput(PasswordEncryptorBeforeDataBaseInput passwordEncryptorBeforeDataBaseInput) {
    this.passwordEncryptorBeforeDataBaseInput = passwordEncryptorBeforeDataBaseInput;
}

@ManagedProperty(value = "#{passwordEncryptorBeforeDataBaseInput}")
PasswordEncryptorBeforeDataBaseInput passwordEncryptorBeforeDataBaseInput;

@EJB
StudentDao studentDao;

public String getLogin() {
    return login;
}

public void setLogin(String login) {
    this.login = login;
}

public String getPassword() {
    return password;
}

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

public long getId() {
    return id;
}

public void setId(long id) {
    this.id = id;
}

private String password;
private String login;
private long id;

public String login() {

    logger.info(String.format("Login inicjacja, login=%s password: ******", login));

    EntityManager em = studentService.getInstanceOfEntityManager();

    Student student = (new DataBaseSelectorFactory()).findSensitiveData(getLogin(), em, "login");

    try {

        String psswdFromForm = getPassword();

        logger.log(Level.INFO, "Czy pobrano studenta z bazy ? " + student.getLogin() + " : " + student.getPassword() + " : " + student.getId());

        String passwEncrypted = (new PasswordEncryptorBeforeDataBaseInput()).encryptePassword(psswdFromForm);

        if (student == null) {
            userSessionBean.showError("Błąd logowania", "Podany użytkownik nie istnieje.");

            return (null);
        }
        if (!(new LoginBean()).authorize(login, passwEncrypted, student)) {
            userSessionBean.showError("Błąd logowania", "Podano niepoprawne hasło lub login.");

            return (null);
        }

        logger.info("login,password,student validated ; sesssion put and stored correctly in HashMap.");

    } catch (Exception e) {

        userSessionBean.showError("Błąd logowania", "Please contact administrator.");

        logger.log(Level.SEVERE, "LoginBean.login - DaoException (student not found)", e);

        return (null);
    }

    logger.log(Level.SEVERE, "student ma pole imię :" + student.getFirstName());
    logger.log(Level.SEVERE, "student ma pole id :" + String.valueOf(student.getId()));
    logger.log(Level.SEVERE, "student ma pole login :" + student.getLogin());

// to wołam stronę account.xhtml

   ** return (new PersonalAccountBuilder()).buildAccount(student);**

}

public void setFieldsLoggingToZero() {
    setLogin("");
    setPassword("");
}

@Override
public boolean authorize(String login, String passwEncrypted, Student student) {

    logger.log(Level.INFO, "Argumenty w metodzie authorize : login : " + login + " : pswfromForm : " + passwEncrypted + " : hasło z bazy danych : " + student.getPassword());

    if (student.getLogin().equals(login) && student.getPassword().equals(passwEncrypted)) {

        return true;
    } else {
        logger.info(rejectAuthMssg);
        return false;
    }
}

}

Klasa PersonalAccountBuilder (budowa pól dla account.xhtml i zwrot Stringu do LoginBean) :
(W opisie słownym bez kodu - używałem nazwy BuilderAccount - myślałem , że może w ogóle nie
będzie potrzebna)

@ManagedBean
@SessionScoped
public class PersonalAccountBuilder implements Serializable {

public String getFirstName_account() {
    return firstName_account;
}

public void setFirstName_account(String firstName_account) {
    this.firstName_account = firstName_account;
}

public String getLastName_account() {
    return lastName_account;
}

public void setLastName_account(String lastName_account) {
    this.lastName_account = lastName_account;
}

public String getDowosob_account() {
    return dowosob_account;
}

public void setDowosob_account(String dowosob_account) {
    this.dowosob_account = dowosob_account;
}

public String getPesel_account() {
    return pesel_account;
}

public void setPesel_account(String pesel_account) {
    this.pesel_account = pesel_account;
}

public String getIban_account() {
    return iban_account;
}

public void setIban_account(String iban_account) {
    this.iban_account = iban_account;
}

public String getGender_account() {
    return gender_account;
}

public void setGender_account(String gender_account) {
    this.gender_account = gender_account;
}

public String getPostalCode_account() {
    return postalCode_account;
}

public void setPostalCode_account(String postalCode_account) {
    this.postalCode_account = postalCode_account;
}

public String getStreet_account() {
    return street_account;
}

public void setStreet_account(String street_account) {
    this.street_account = street_account;
}

public String getHouseNumber_account() {
    return houseNumber_account;
}

public void setHouseNumber_account(String houseNumber_account) {
    this.houseNumber_account = houseNumber_account;
}

public String getApartmentNumber_account() {
    return apartmentNumber_account;
}

public void setApartmentNumber_account(String apartmentNumber_account) {
    this.apartmentNumber_account = apartmentNumber_account;
}

public String getCity_account() {
    return city_account;
}

public void setCity_account(String city_account) {
    this.city_account = city_account;
}

public String getVoivodeship_account() {
    return voivodeship_account;
}

public void setVoivodeship_account(String voivodeship_account) {
    this.voivodeship_account = voivodeship_account;
}

public String getCounty_account() {
    return county_account;
}

public void setCounty_account(String county_account) {
    this.county_account = county_account;
}

public String getLogin_account() {
    return login_account;
}

public void setLogin_account(String login_account) {
    this.login_account = login_account;
}

public String getPassword_account() {
    return password_account;
}

public void setPassword_account(String password_account) {
    this.password_account = password_account;
}

public String getEmail_account() {
    return email_account;
}

public void setEmail_account(String email_account) {
    this.email_account = email_account;
}

public String getPrefix_account() {
    return prefix_account;
}

public void setPrefix_account(String prefix_account) {
    this.prefix_account = prefix_account;
}

public String getPhone_account() {
    return phone_account;
}

public void setPhone_account(String phone_account) {
    this.phone_account = phone_account;
}

private long id;
private String firstName_account;
private String lastName_account;
private String dowosob_account;
private String pesel_account;
private String iban_account;
private String gender_account;
private String postalCode_account;
private String street_account;
private String houseNumber_account;
private String apartmentNumber_account;
private String city_account;
private String voivodeship_account;
private String county_account;
private String login_account;
private String password_account;
private String email_account;
private String prefix_account;
private String phone_account;

public long getId() {
    return id;
}

public void setId(long id) {
    this.id = id;
}

public String startPersonalPage = "account";

Logger logger = Logger.getLogger(PersonalAccountBuilder.class.toString());

public String buildAccount(Student student) {

    logger.log(Level.SEVERE, "Student przekazany do PersonalAccountBuilder :" + student);

    setId(student.getId());
    setFirstName_account(student.getFirstName());
    setLastName_account(student.getLastName());
    setDowosob_account(student.getDowosob());
    setPesel_account(student.getPesel());
    setIban_account(student.getIban());
    setGender_account(student.getGender());
    setPostalCode_account(student.getPostalCode());
    setStreet_account(student.getStreet());
    setHouseNumber_account(student.getHouseNumber());
    setApartmentNumber_account(student.getApartmentNumber());
    setCity_account(student.getCity());
    setVoivodeship_account(student.getVoivodeship());
    setCounty_account(student.getCounty());
    setLogin_account(student.getLogin());
    setPassword_account(student.getPassword());
    setEmail_account(student.getEmail());
    setPrefix_account(student.getPrefix());
    setPhone_account(student.getPhone());

    logger.log(Level.SEVERE, "PersonalAccountBuilder ma pole imię :" + getFirstName_account());
    logger.log(Level.SEVERE, "PersonalAccountBuilder ma pole email :" + getEmail_account());
    logger.log(Level.SEVERE, "PersonalAccountBuilder ma pole id_account :" + String.valueOf(getId()));

    return startPersonalPage + "?faces-redirect=true" + "&includeViewParams=true";

}

}

Logi nie wykazują żadnych błędów , w loggerach są odpowiednie wartości pół obiektów : personalAccountBuilder oraz student.

?

edytowany 1x, ostatnio: JavaRookie, 2018-08-10 17:27
Bez urazy Kolego, ale skąd kopiujesz te koszmary? Cofnij się krok, dwa, popróbuj coś prostszego, na czym czegoś pożytecznego się nauczysz. update: POZORNIE wygląda jak kod ze wzorcami, warstwami, jakięś Service, jakieś Buildery, mądre nazwy - w rzeczywistości wypruwasz wnętrzności ze wszystkiego łącznie z bebechami primefaces i kwiatkami jak EntityManager em = studentService.getInstanceOfEntityManager(); - AnyKtokolwiek 2018-08-10 17:30

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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