Prime Faces <p:messages...>

3 respostas
S

Bom dia.

Faz pouco mais de 4 meses que estou trabalhando em projetos com um ambiente envolvendo Java, JBoss, Prime Faces…
Vou explicar o que está acontecendo e se seria possível fazer o que estou pretendendo.

No projeto existe uma página xhtml. Nesta página eu coloquei o componente messages do Prime Faces da seguinte forma:

<p:messages id="msg" autoUpdate="true" showDetail="true"/>

mais adiante na mesma página incluí um componente inputText da seguinte forma:

<div class="campo-grupo">
	<h:outputLabel value="Sigla" />
	<p:inputText id="sigla" value="#{escolaBean.escola.sigla}"
		maxlength="100" required="true"
		onblur="this.value=this.value.toUpperCase()"
		requiredMessage="Preencha o campo sigla"
		style="text-transform:uppercase; width:60px;"
		title="Digite a sigla" />
</div>

No componente inputText eu setei as propriedades required e requiredMessage para que seja mostrada uma advertência quando o usuário não coloca nada neste campo.
Como no componente messages eu setei showDetail=“true”, na renderização desta página, ao apresentar a mensagem, ela aparece duas vezes.

O que eu queria é saber se tem como setar a segunda mensagem pelo xhtml. Tal como eu fiz em requiredMessage=“Preencha o campo sigla”.

Eu consigo fazer isso sem problemas se fizer essa checagem no bean.
De dentro do bean eu posso usar o FacesMessage(FacesMessage.SEVERITY_WARN, “mensagem 1”, “mensagem 2”); para que o componente apresente as duas mensagens.

Mas como tem várias páginas em que eu gostaria de incluir a possibilidade de mostrar o details da mensagem, ficaria mais simples se tivesse como setar a mensagem de detalhes pelo xhtml do que alterar vários beans.

Alguém já passou por algo semelhante e teria uma solução sem precisar alterar os beans??

Obrigado.

3 Respostas

D

Tente altera seu input assim:

<p:inputText id="sigla" value="#{escolaBean.escola.sigla}"  
        maxlength="100" required="true"  
        onblur="this.value=this.value.toUpperCase()"  
        requiredMessage="Preencha o campo sigla"  
        style="text-transform:uppercase; width:60px;"  
        title="Digite a sigla" > 

     <h:message for="sigla" style="color: red;display: block"/>

</p:inputText>

e no acrescente globalOnly="true"

Desta forma a mensagem ira aparecer próximo ao seu input. N testei com p:message (message no singular), mas deve ter o mesmo efeito.

S

Obrigado Deyhan.

Desculpe a demora, feriadão…

Então. Eu já havia tentado o que você sugeriu porém com o <p:message.

Desse modo até que funcionou, mas ao aparecer a mensagem ao lado do inputText a página ficava desformatada. É que eu tenho alguns input text lado a lado e também em várias linhas.
E ao aparecer a mensagem do <p:message essa formatação do layout fica bagunçada.

Acho que a solução para o que desejo é deixar o bean controlar todas essas mensagens, ou nesses casos deixar repetir a mensagem ou por último não mostrar os details, deixando apenas a mensagem que aparece em negrito na página.

Obrigado novamente pelo auxílio.

L

Eu resolvi desta forma, ve se ajuda. Havendo alguma duvida é só postar.

Criado 6 de junho de 2012
Ultima resposta 11 de jun. de 2012
Respostas 3
Participantes 3