JSF: Messages específicos

9 respostas
F

Olá pessoal!

Criei um formulário usando os componentes do JSF, e os message, que informam ao usuário se o campo foi preenchido corretamente, ou seja, tenho um message para cada inputText por exemplo. Até aí tudo bem…

Eu gostaria de ter um outro message que irá informar se o formulário foi ou não submetido com sucesso, tentei usar o componentes messages mas ele abrange todo tipo de validação na tela, ou seja. além dos message para cada componente, ainda aparece a lista do messages.

Gostaria de ter um único message específico somente para informar se o form foi submetido ou não! :smiley:

Alguma sugestão??? ;D

9 Respostas

F
F

Pô me expressei mal. Vou mostrar o que realmente quero fazer:

//TelaFormularioMB.java
public class TelaFormularioMB {
	private HtmlInputText nome;
	private HtmlInputText email;

	public TelaPreencherFormularioMB() {
		setNome(new HtmlInputText());
		setEmail(new HtmlInputText());
	}
	public void submitAction(ActionEvent evt) {
		Usuario usuario = new Usuario();
		usuario.setNome((String)getNome().getValue());
		usuario.setEmail((String)getEmail().getValue());
		
		UsuarioDAO dao = new UsuarioDAO();
		if(dao.insert(usuario)) 
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Sucesso na Operação", null));
		else
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro na Operação", null));
	}
}
<!-- formulario.xhtml -->
<h:form>
	<h:inputText id="nome" binding="telaFormularioMB.nome" require="true" requiredMessage="Preencha"/><h:message for="nome"/>
	<h:inputText id="email" binding="telaFormularioMB.email" require="true" requiredMessage="Preencha"/><h:message for="email"/>
	<a4j:commandButton id="submit" actionListener="telaFormularioMB.submitAction"/>
</h:form>

Então, como mostrei acima, e consigo validar individualmente cada campo, com o componente message para cada um, mas no momento do submit, meu action retorna um message pra nada. Eu ainda tentei usar o componente messages mas ele é muito genérico então pega também os outros campos.

Consegui passar bem meu problema? Existe alguma forma de fazer isso?

L

cara vamos ver se vc passou bem seu problema rssrsrs,o que eu entendi é que vc quer retornar uma mensagen de um metodo, e quer um messages para exibir somente as memsagens retornadas pelos metodos de controle,± isso né, se for isso use o h:messages assim:

<h:messages errorStyle="color: red" infoStyle="color: green" layout="table" showSummary="true" showDetail="false" globalOnly="true"/>

marque globalOnly como true que deve resolver.
espero que ajude t+.

F

E assim:

<a4j:outputPanel ajaxRendered="true"> <h:message for="idDoObjeto"></h:message> </a4j:outputPanel>

F

felipeguerra, eu fazendo desse jeito, só consigo pegar a msg atribuida a um determinado componente na tela, o que eu quero é pegar uma msg do meu método de controle como o lgweb falou. De qualquer maneira muito obrigado pela ajuda.

lgweb, era exatamente isso, só tava faltando o atributo globalOnly, agora tá redondo…

<rich:messages id="globalMessages" globalOnly="true"> <f:facet name="errorMarker"><h:graphicImage value="/_img/error.png"/></f:facet> <f:facet name="infoMarker"><h:graphicImage value="/_img/info.png"/></f:facet> </rich:messages>

Perfeito! :smiley:
Muito obrigado cara! :smiley:

F

Aproveitando o ensejo, alguém aí já teve que atribuir mais de um valor ao mesmo objeto na página?

Tipo assim: Tenho que concatenar valores num hidden para pegar através do JavaScript, vejam…

Mas aí eu tenho o problema a seguir:

01/04/2008 15:21:20 javax.faces.component.UIInput updateModel SEVERE: /faces/consultacarona.jspx @43,215 value="#{carona.caronistas[0].idPessoa},#{carona.caronistas[0].nome}": Illegal Syntax for Set Operation 01/04/2008 15:21:20 javax.faces.component.UIInput updateModel SEVERE: /faces/consultacarona.jspx @43,215 value="#{carona.caronistas[0].idPessoa},#{carona.caronistas[0].nome}": Illegal Syntax for Set Operation 01/04/2008 15:21:20 com.sun.faces.lifecycle.RenderResponsePhase execute

Muito estranho…

F

cara funcionou certinho…
será que não tem a ver com o array que vc criou?
tenta passar valores simples, strings…

F

Não é isso, o JSF deve estar se perdendo na hora de setar o valor no atributo, pois eu coloco mais de um value…

G

felipempantoja:
felipeguerra, eu fazendo desse jeito, só consigo pegar a msg atribuida a um determinado componente na tela, o que eu quero é pegar uma msg do meu método de controle como o lgweb falou. De qualquer maneira muito obrigado pela ajuda.

lgweb, era exatamente isso, só tava faltando o atributo globalOnly, agora tá redondo…

<rich:messages id="globalMessages" globalOnly="true"> <f:facet name="errorMarker"><h:graphicImage value="/_img/error.png"/></f:facet> <f:facet name="infoMarker"><h:graphicImage value="/_img/info.png"/></f:facet> </rich:messages>

Perfeito! :smiley:
Muito obrigado cara! :smiley:


Amigo, consegue me explicar o que você está fazendo dentro deste facet?
Outra coisa, gostaria de limpar os campos que utilizei pra inserir os dados após a mensagem de confirmação de envio do form ser apresentada, tem como?

Criado 1 de abril de 2008
Ultima resposta 25 de mar. de 2012
Respostas 9
Participantes 4