Java JSF Ajax

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.pl/images/87264066563395777034.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ć ?

0

ok poradziłem sobie.

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