Bom dia galera, seguinte
Estou em uma página de login e, caso o login nao seja efetuado com sucesso, gostaria que exibisse uma msg informando q o login nao foi realizado.
porém ao carregar a página, tanto faz eu usar o componente growl ou messages do prime, ele carrega a pagina já com o growl descrevendo o seguinte erro:
The button/link/text component needs to have a Form in its ancestry. Please add <h:form>.
Mas conforme postarei aqui o codigo abaixo, nao visualizei lugar algum que esta faltando o form… espero que me ajudem, segue o codigo abaixo
Pagina login
<h:body>
<ui:composition template="/template/template.xhtml">
<ui:define name="conteudo">
<h:form id="cadastro">
<p:growl id="aviso" showSummary="false" sticky="true" showDetail="true" life="6000" />
<p:panel id="painelLogin" header="#{msgs.LOGIN_PAINEL_TITULO}">
<h:panelGrid columns="3">
<h:outputLabel value="#{msgs.LOGIN_USUARIO}" />
<p:inputText value="#{loginMB.usuario.nome}" id="txtUsuario" label="Usuário" required="true"
requiredMessage="#{msgs.LOGIN_USUARIO_VAZIO}" />
<p:message for="txtUsuario" />
<h:outputLabel value="#{msgs.LOGIN_SENHA}" />
<p:password value="#{loginMB.usuario.senha}" id="txtSenha" label="Senha" required="true"
requiredMessage="#{msgs.LOGIN_SENHA_VAZIO}" />
<p:message for="txtSenha" />
</h:panelGrid>
<p:commandButton value="#{msgs.LOGIN_BOTAO_ENTRAR}" action="#{loginMB.logar}" update="aviso" ajax="false"/>
<p:commandButton value="#{msgs.LOGIN_BOTAO_RECUPERAR}" />
</p:panel>
</h:form>
</ui:define>
</ui:composition>
</h:body>
Template
[code]
<h:body>
<h:form>
<div id="layout">
<p:layout fullPage="true" id="layout">
<!-- Cabeçalho-->
<p:layoutUnit position="north" resizable="false" size="100">
</p:layoutUnit>
<!--Menu Esquerdo -->
<p:layoutUnit position="west">
<p:menu>
<p:submenu label="#{msgs.MENU_CADASTRO_USUARIO_TITULO}" rendered="#{loginMB.menuCadastro}">
<p:menuitem value="#{msgs.MENU_CADASTRO_USUARIO_LOGIN}" outcome="/index" />
<p:menuitem value="#{msgs.MENU_CADASTRO_USUARIO_CADASTRAR}" outcome="/usuario/cadastrar"/>
</p:submenu>
<p:submenu label="#{msgs.MENU_CADASTRO_USUARIO_TITULO}" rendered="#{loginMB.mostrarMenu}">
<p:menuitem value="#{msgs.MENU_CADASTRO_USUARIO_ALTERAR}" />
<p:menuitem value="#{msgs.MENU_CADASTRO_USUARIO_LOGOFF}" />
</p:submenu>
<p:submenu label="#{msgs.MENU_PERSONAGEM_TITULO}" rendered="#{loginMB.mostrarMenu}">
<p:menuitem value="#{msgs.MENU_PERSONAGEM_ADD}" rendered="#{loginMB.mostrarMenu}" />
<p:menuitem value="#{msgs.MENU_PERSONAGEM_ALTERAR}" rendered="#{loginMB.mostrarMenu}" />
<p:menuitem value="#{msgs.MENU_PERSONAGEM_LISTAR}" rendered="#{loginMB.mostrarMenu}" />
</p:submenu>
<p:submenu label="#{msgs.MENU_ITEM_TITULO}" rendered="#{loginMB.mostrarMenu}" >
<p:menuitem value="#{msgs.MENU_ITEM_EDITAR}" rendered="#{loginMB.mostrarMenu}" />
<p:menuitem value="#{msgs.MENU_ITEM_CONFERIR}" rendered="#{loginMB.mostrarMenu}" />
<p:menuitem value="#{msgs.MENU_ITEM_COMPLETO}" rendered="#{loginMB.mostrarMenu}" />
</p:submenu>
</p:menu>
</p:layoutUnit>
<!-- rodapé -->
<p:layoutUnit position="south" size="50">
<div align="center">
<h:outputText style="text-align: center;" value="#{msgs.FOOTER_MESSAGE}"/>
</div>
</p:layoutUnit>
<!--Conteúdo dinâmico -->
<p:layoutUnit position="center">
<ui:insert name="conteudo">
<h:form></h:form>
</ui:insert>
</p:layoutUnit>
</p:layout>
</div>
</h:form>
</h:body>[/code]
e meu método que cria a mensagem
/**
* Método que verifica se usuário existe no banco e realiza login
* @param usuario - usuario que sera feito o login
* @return true caso logado, false caso erro no login
*/
public boolean login(Usuario usuario){
boolean logado = false;
Connection conexao = null;
try{
conexao = GerenciadorConexoes.pegarInstancia().abrirConexao();
String sql = GerenciadorConexoes.pegarInstancia().pegarPropriedade("VALIDA_LOGIN");
PreparedStatement ps = conexao.prepareStatement(sql);
ps.setString(1, usuario.getNome());
ps.setString(2, usuario.getSenha());
ResultSet rs = ps.executeQuery();
if (rs.next()){
logado = true;
}else {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
"Usuário e/ou senha inválidos","Tente Novamente"));
}
}catch(SQLException e){
Logger.getLogger("LoginDAO").log(Level.SEVERE, "Problemas na comunicação com o banco de dados");
Logger.getLogger("LoginDAO").log(Level.SEVERE, "Mensagem de exceção: ",e.getMessage());
}finally{
GerenciadorConexoes.pegarInstancia().fecharConexao(conexao);
}
return logado;
}
será que alguem pode dar uma luz?
abraçoes e valew
qualquer coisa vou deixar sem