Problemas para cadastrar em JSF

3 respostas
C

Já que é bem nexessário, também utilizo captcha em minhas aplicações, mas gostaria que o formulário de cadastro fosse em tags JSF, o que facilitaria no tratamento e validações de campos.

Mas tô com problemas: o botão de submit sumiu:

<h:form id="form1">
<table>
<tr>
    <td align="right">Pagamento:</td>
    <td>
        <!-- o div contendo nosso conteúdo a ser mostrado //-->
        <script src="../../js/forms.js"></script>
        <input type="radio" name="formaPgto" value="boleto" checked>Boleto
        <input type="radio" name="formaPgto" value="cartao">Cartão
        <input type="radio" name="formaPgto" value="deposito">Depósito
        <input type="radio" name="formaPgto" value="transferencia">Transferência
    </td>
</tr>
<tr>
    <td></td>
    <td>&nbsp;</td>
</tr>
<tr style="color:#000;">
    <td align="right">Código:</td>
    <td><small>* Digite corretamente o código de segurança</small></td>
</tr>
<tr style="color:#000;">
    <td></td>
    <td><img src="../../Kaptcha.jpg" alt="security image" title="security image" onclick="this.src='../../Kaptcha.jpg'"/></td>
</tr>
<tr>
    <td></td>
    <td>
        <h:inputText id="kaptchafield" maxlength="5" autocomplete="off" value="#{LoginBean.kaptcha}" required="true">
            <f:validateLength maximum="5" minimum="5"/>
        </h:inputText>
    </td>
</tr>
<tr>
    <td></td>
    <td><h:message for="kaptchafield" style="color:red;"/></td>
</tr>

<tr>
    <td></td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td></td>
    <td><h:commandButton action="#{LoginBean.CheckCadastro}" image="images/button-acessar.gif" value=""/></td>
</tr>
<tr>
    <td></td>
    <td>&nbsp;</td>
</tr>
</table>
 </h:form>

Eu defini no managed-bean certinho o LoginBean.CheckCadastro, mas tentei fazer com que voltasse pra mesma página se houvesse erro em validações de e-mail, ou captcha mas daí o botão de submit sumiu.

A prova:

[img]http://img34.imageshack.us/img34/6897/cadastrojsfcaptcha.gif[/img]

Isso aconteceu após mapear a classe faces-config

Meu faces-config:
<managed-bean>
    <managed-bean-name>LoginBean</managed-bean-name>
    <managed-bean-class>cadastro.LoginBean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

<navigation-rule>
    <from-view-id>/themes/red/cadastro.do</from-view-id>
    <navigation-case>
        <from-action>#{LoginBean.CheckCadastro}</from-action>
        <from-outcome>success</from-outcome>
        <to-view-id>loginsuccess.jsp</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-action>#{LoginBean.CheckCadastro}</from-action>
        <from-outcome>fail</from-outcome>
        <to-view-id>/themes/red/cadastro.do</to-view-id>
    </navigation-case>
</navigation-rule>

Como só definir um valor pra captcha (é porque decidir testar antes de executar), então só tem getter e setter , variavel kaptcha mesmo.:

package cadastro;

import java.io.IOException;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;

/**
 *
 * @author FF Criações
 */
public class LoginBean {
    String kaptcha;

	public LoginBean() {
            
        }

	public String getLoginid() {
		return kaptcha;
	}
        
	public void setLoginid(String kaptcha) {
		this.kaptcha = kaptcha;
	}
        
        
	public String CheckCadastro() throws IOException {
   //******************************************//
  //     capturando parâmetro do Captcha      //
 //*******************************************//   
  // String c = (String)session.getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
  // String parm = (String) request.getParameter("kaptchafield");
    
  String c = (String)FacesContext.getCurrentInstance()
          .getExternalContext().getSessionMap().get(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
  
  String parm = (String)FacesContext.getCurrentInstance()
          .getExternalContext().getSessionMap().get("kaptchafield");
 
   //out.println("<p>Código: " + parm + " ? Session Key: " + c + " : ");
     
   if (c != null && parm != null) {
       if (!c.equals(parm)) { // se o valor digitado for diferente do captcha
           FacesContext.getCurrentInstance().getExternalContext()
                   .getSessionMap().put("Erro", "Digite o código corretamente!");  
           FacesContext faces = FacesContext.getCurrentInstance();
           ExternalContext context = faces.getExternalContext();
           context.redirect("/themes/red/cadastro.do");
           return "fail";
       } else {
           return "sucess";
       }
   }// fim  da validação captcha
   return "success";
}
}

Sei que estou fazendo muita coisa errada, mas não quero desistir, pois já realizei cadastros antes, mas era pegando os strings com UI e não quero usar isso pq imagina se eu for pegar de todo o formulário que mostrei Oo . Seria muito código.

E então gente, o que está errado? Eu setei o método CheckCadastro lá no botão, mas pq ele sumiu?
Não entendo.
Isso já aconteceu antes aqui comigo, mas era nos textfields, e tb acho que era configuração errada no faces-config.

Fica aí minha dúvida. Nunca consegui resolver, já procurei a documentação, exemplos que não utilizam UI Component eu não encontrei para tirar dúvida, então peço ajuda aqui.

Grato.

3 Respostas

C

alguém?

C

up!!!

Kleber-rr

Eae amigo, conseguiu resolver teu problema?

Criado 23 de maio de 2009
Ultima resposta 31 de jan. de 2011
Respostas 3
Participantes 2