Primefaces messages are shown twice

Components, Ajax Framework, Utilities and More.
Post Reply
medalex
Posts: 5
Joined: 15 Nov 2011, 17:06

15 Nov 2011, 17:30

Hello.

I have a question about primefaces messages. I have a flow where user can change his password. Before it is saved to database validation takes place. If the validation fails error messages are shown. The problem is that these messages are shown twice in different places: in the <p: messages> block defined in xhtml and in the form's right upper corner.

My version of primefaces is 2.2.1
Here is my flow:

Code: Select all

<?xml version="1.0" encoding="UTF-8"?>
<flow xmlns="http://www.springframework.org/schema/webflow"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/webflow
        http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd">

	<action-state id="start">
		<evaluate expression="userService.getUser(currentUser.name)"
			result="flowScope.user"></evaluate>
		<transition to="view"></transition>
	</action-state>
	<view-state id="view" view="profile-view.xhtml">
		<transition on="edit" to="edit" />
		<transition on="cancel" to="cancel"></transition>
	</view-state>

	<view-state id="edit" view="profile-edit.xhtml">

		<transition on="back" to="start"></transition>
		<transition on="cancel" to="cancel"></transition>
		<transition on="save" to="actionSave"></transition>
	</view-state>

	<action-state id="actionSave">
		<evaluate expression="userValidator.validate()"></evaluate>
		<transition to="edit"></transition>
	</action-state>

	<end-state id="cancel"></end-state>
</flow>
Here is profile-edit.xhtml

Code: Select all

<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:t="http://myfaces.apache.org/tomahawk"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://primefaces.prime.com.tr/ui"
	xsi:schemaLocation="
        http://java.sun.com/jsf/facelets facelets-ui-2.0.xsd
        http://java.sun.com/jsf/core jsf-core-2.0.xsd
        http://java.sun.com/jsf/html html-basic-2.0.xsd"
	template="/WEB-INF/layouts/standard.xhtml">
	<ui:define name="content">

		<h:form>
			<p:fieldset legend="Edit profile">
				<p:messages id="userFormMsgs"/>
				<div align="center">
					<h:panelGrid columns="2">
						<h:outputLabel for="user" value="Username " />
						<p:inputText id="user" value="#{userValidator.username}" />
						<h:outputLabel for="old-pass" value="Old password " />
						<p:password id="old-pass" value="#{userValidator.oldPass}"
							feedback="false" label="Password" />
						<h:outputLabel for="new-pass" value="New password " />
						<p:password id="new-pass" value="#{userValidator.newPass}"  feedback="false" />
						<h:outputLabel for="new-pass-confirm"
							value="Confirm new password " />
						<p:password id="new-pass-confirm" value="#{userValidator.newPassConfirmed}" feedback="false" />

					</h:panelGrid>
					<p:commandButton action="save" value="Save" 
						update="userFormMsgs" />
					<p:commandButton action="back" value="Back" />
					<p:commandButton action="cancel" value="Cancel" />
				</div>
			</p:fieldset>
		</h:form>
	</ui:define>
</ui:composition>
What may be the reason of this JSF behavior?

Thank you in advance.

kukeltje
Expert Member
Posts: 8400
Joined: 17 Jun 2010, 13:34
Location: Netherlands

15 Nov 2011, 18:38

The presence of 2 p:messages? or a p:messages and a normal one?
Ronald van Kuijk
______________________________
PrimeFaces 5.2, PrimeFaces plus 0.0.2 | JbossWildfly 8.1| Mojarra 2.2.8
Fedora 21, Firefox 'most recent'
Read the forum posting rules
Beginners: https://jsf.zeef.com/bauke.scholtz

medalex
Posts: 5
Joined: 15 Nov 2011, 17:06

16 Nov 2011, 10:57

Hello,

As you can see in the .xhtml page, there is only one p:messages.
Here is the code of validation which add the messages to context:

Code: Select all

public String validate(User user) {
		FacesContext ctx = FacesContext.getCurrentInstance();
		
		EmailValidator emailValidator = new EmailValidator();
		boolean isEmailValid = emailValidator.isValid(username, null);
		
		if (( username == null) || (username.length() < 1)) {
			ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Username cannot be empty!", ""));
		}
		if (!isEmailValid) {
			ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Email is not valid!", ""));
		}
		if (!user.getPassword().equals(oldPass)) {
			ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Wrong password entered!", ""));
		}

		if (!newPass.equals(newPassConfirmed)) {
			ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "New password confirmation failed!", ""));
		} else {
			if (newPass.length() < 6) {
				ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Password should be at least 6 symbols!", ""));
			}
		}

		if (ctx.getMessageList().size() > 0) {
			return (null);
		} else {
			user.setPassword(newPass);
			user.setUsername(username);
			repository.save(user);
			ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Profile updated!", ""));
			return (null);
		}
Could you please specify what you mean under "normal one"?

Thank you in advance.

kukeltje
Expert Member
Posts: 8400
Joined: 17 Jun 2010, 13:34
Location: Netherlands

16 Nov 2011, 14:02

It's a composition in a template. In the template can be another one. And a normal one is h:messages
Ronald van Kuijk
______________________________
PrimeFaces 5.2, PrimeFaces plus 0.0.2 | JbossWildfly 8.1| Mojarra 2.2.8
Fedora 21, Firefox 'most recent'
Read the forum posting rules
Beginners: https://jsf.zeef.com/bauke.scholtz

Post Reply
  • Information
  • Who is online

    Users browsing this forum: No registered users and 44 guests