Java JSF Ajax

Odpowiedz Nowy wątek
2016-05-03 18:11
qeniu
0

Witam, robię sobie formularz rejestracji i chciałbym rozwiązać problem podwójnych wiadomości. Pierwszy rodzaj to wiadomości, które wysyłane są po przez FacesMessage po wysłaniu zapytania (klinięcie submit w form'ie), a drugi rodzaj to ajax'owe wiadomości - gdzie sprawdzam na bieżąco czy dana nazwa użytkownika jest zajęta czy też wolna. Chodzi o to, że chciałbym te wiadomości scalić do jednego znacznika JSF'owego <h:message> (dla FacesMessage) lub <h:outputtext> (dla ajaxa).

<h:form id="registerForm">

    <h:panelGrid columns="4" rendered="#{!login.loggedIn}">

        <h:outputLabel>Username:</h:outputLabel>
        <h:inputText value="#{registerCredential.username}">
            <f:ajax event="blur" render="userName" listener="#{register.checkRegistered}"/>
        </h:inputText>
        <h:outputText id="userName" value="#{register.info}"/>
        <h:message for="userName" style="color: red"/>
    </h:panelGrid>

</h:form>

Wiadomość pochodząca z form'a (poprzez kliknięcie submit):

@ManagedBean(name = "register")
@RequestScoped

....

FacesContext fc = FacesContext.getCurrentInstance();
UserDAO dao = new UserDAO();        

User user = dao.getByUsername(this.registerCredential.getUsername());

if(user != null)  { // Nazwa uzytkownika jest zajeta
    checkRegister = false;
    fc.addMessage("registerForm:userName", new FacesMessage("Nazwa użytkownika jest już zajęta (FacesMessage)"));
}

Wiadomość pochodząca z AJAX'a:

@ManagedBean(name = "register")
@RequestScoped

...

public void checkRegistered() {

    UserDAO dao = new UserDAO();
    User user = dao.getByUsername(this.registerCredential.getUsername());

    if(user != null)  {
        this.info = "Ta nazwa uzytkownika jest zajeta (AJAX)";
        System.out.println(this.info);
    }
}

W rezultacie gdy wpisuje w inputText'a nazwę użytkownika, która znajduje się już w bazie otrzymuje i kliknę submit to dostaję pierwszą wiadomość:
Nazwa użytkownika jest już zajęta (FacesMessage)

ta wiadomość oczywiście pozostaje dalej na ekranie i gdy wpiszę znowu te samą nazwę użytkownika to swoją robotę robi AJAX i dorzuca tę samą wiadomość, ale jako zdouble'owaną.

Powstaje taki efekt:
[URL=http://iv.pl/][IMG]http://iv.[...]66563395777034.png[/IMG][/URL]
http://iv.pl/images/87264066563395777034.png

A więc chciałbym te wiadomości scalić, a dokładniej wyświetlać tylko jedną. Myślałem o tym, żeby wiadomość AJAX'a przekierowywać do znacznika <h:message> i jednocześnie usunąc znacznik <h:outputtext>, ale nie zatrybiło bo chyba nie ma prawa działać taka kombinacja. A jeżeli ma, to jak to zrobić, albo w inny sposób to rozwiązać ?

Pozostało 580 znaków

2016-05-03 21:18
qeniu
0

ok poradziłem sobie.

zawsze wypada napisać co rozwiązało problem - margor90 2016-05-03 21:25

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