função pra bloquear requisição

5 respostas
L

Olá gente, tenho um controller em Java que pega um modelAtributte do meu HTML quando dou um POST. Ai ele faz o que tem que fazer e redireciona pra um outra pagina.

Nesse html tenho um javascript que pega o evento onclick(); de um button. Esse evento chama uma função que faz o tratamento dos campos (ex. mostra uma mensagem ao usuario informando que ele deixou algum campo em branco).

Aqui o meu javascript Código:
function validField(){    

   var p = document.programform;
   var sDiv = document.getElementById("alertProgram");
   
    if (p.acronym.value=="")
    {
     sDiv.style.visibility = "visible";
     p.acronym.focus();
    return false;
    }
    if (p.descrip.value=="")
    {
     sDiv.style.visibility = "visible";
     p.acronym.focus();   
    return false;
    }
    document.forms["validField"].submit();
    return true;
}

Até ai tudo bem. O meu problema é que ele percorre o javascript e não bloqueia a tela quando o usuário nao preenche os campos. Tipo: o usuario nao preenche os campos, a app mostra a mensagem pra ele falando que ele esqueceu de preencher algo (até aqui td bem), mas ele nao bloqueia a tela, ele simplesmente entra no meu controller e redireciona pra outra tela...

Alguem ai poderia me ajudar ?

5 Respostas

E

olá,

Poderia colocar um trecho de código onde essa sua function foi utilizada? Assim fica mais fácil tentar te ajudar.

[]s

L

Ah sim claro, desculpe.

o HTML está assim:
<body style="overflow:hidden;">
<form:form method="POST" name="programform" modelAttribute="program" onsubmit="return validField()">
<div id="Wrapper" >
<div class="bg1">
  <div class="bg2">
  
      <!-- Content -->
    <div id="content" >
         
       <!-- Cadastro -->                    
       <div id="cadastro">
					
                    <!-- Table of Contents -->
         <div id="table">             
             <div id="tableContents" >
             		<!-- form alert -->
             			<div id="alertProgram" style="display: none; "> <!-- visibility: hidden;  -->
                      		<p class="formAlert">
         				 		<span>
         				 			<strong>The field ACRONYM or DESCRIPTION is empty!</strong>
         				 		</span>
         				 	</p>
         				</div>
		 			<!-- form alert ends -->
             
					 <table id="tablesize" class="config" width=42%>
					 <tbody> 
                    	<tr>
                	         <td width="73%" class="esquerda" >
									<label><strong>ACRONYM: </strong></label><br/>
									<form:input id="acronym" path="abbr" size="30" maxlength="30"/><br/><br/>
   				    	          
    	                     </td>
	                         
    	                 </tr>
    	                  <tr>
                             <td width="27%" class="esquerda">
                	        
									<label><strong><br />
							    Employee: </strong></label><br/>
							    <form:select path="employee.employeeId" itemValue="employeeId" itemLabel="name" items="${employeeList}" /><br/><br/>
									
    	                     </td> 
    	                    
   						</tbody>
                     </table>

					<div id="descript">
					<label><strong>DESCRIPTION: </strong></label><br/>
                      <form:textarea id="descrip" path="description"  cssClass="txtDescript" />
				
               		</div>
            </div>    
         </div>
         <!--End of Table of Contents-->
                    
      </div>
      <!-- Fim Cadastro -->    
                   
         <div id="ResultFooter">
			<div id="button" style="padding: 110px 0 2px 20px">
   				<a href="main.html">
                   	<span class="btnGlobal"><input type="submit" id="postSaveDraft" value="Save"></input></span>
                </a> 
         </div>
         
    </div>
    <!--End of Content-->

</div></div>
</div>
</form:form>
O .java (controller) está assim:
@Controller
@RequestMapping("/program.html")
@SessionAttributes(types = Program.class)
public class ProgramController {

	
	private ProgramaDAO programDAO;
	private Collection<Program> programList;
	private EmployeeDAO employeeDAO;
	private Collection<Employee> employeeList;
	
	@Autowired
	public ProgramController( ProgramaDAO programDAO, EmployeeDAO employeeDAO){
		
		this.programDAO = programDAO;
		this.employeeDAO = employeeDAO;
		
	}
	
	
	public Collection<Employee> employeeList() {
		employeeList = this.employeeDAO.listAll();
		return employeeList;
	}
	 
	 
	@RequestMapping(method = RequestMethod.GET)
	public String setupForm(@RequestParam("op") String op, @RequestParam("id") String id, Model model){
		
		Program program = new Program();
		if (op.equals("delete")){
			
			Integer idp = Integer.parseInt(id);
			program = this.programDAO.loadOne(id);
			this.programDAO.delete(program);
			return "redirect:main.html";
		
		}else{ 
		
			if (op.equals("edit")){
				Integer idp = Integer.parseInt(id);
				program = programDAO.load(idp);
		}
		
		   model.addAttribute("op", op);
		   model.addAttribute("employeeList", employeeList());
		   model.addAttribute("program", program);
		
			
		   return "program";
		}
	}
	
	@RequestMapping(method = RequestMethod.POST)
	public String processSubmit(@RequestParam("op")String op, @ModelAttribute("program")Program program, BindingResult result, SessionStatus status) {
	
	if(op.equals("new")){

		this.programDAO.save(program);
		
	}
	else {

		this.programDAO.update(program);
	}
	return "redirect:main.html";
	}
}
E

Olá,

tentei fazer um teste com o seu código aqui (exceto pelo fato de não ter criado um servidor para receber a requisicao) e notei que um trecho pode estar te atrapalhando. No seu html:

&lt;a href=&quot;main.html&quot;&gt; &lt;span class="btnGlobal"&gt; &lt;input type="submit" id="postSaveDraft" value="Save"&gt;&lt;/input&gt; &lt;/span&gt; </a>

Experimente tirar o href do seu link (troque por “#”)… pode ser por isso que a página esteja sendo enviada… você chegou a debugar e verificar se a requisição estava realmente sendo enviada para o seu controller mesmo dando a mensagem? Se você clicar no botão deve redirecionar independente da sua função, pois vai valer a url do link… se você der enter acredito que o seu código funcione, pois aí vai valer o retorno da sua função…

Faça esses testes e verifique se funciona… qualquer coisa posta ai denovo…

Espero ter ajudado.

[]s

L

Sim, estava enviando a requisição sim. Ttirei o main.html como falou, e ele nao capturou evento algum do botão, simplesmente ficou na tella de cadastro de programa. Esse main.html está em uma outra .jsp, que é controlada por um outro controller. Esse controller carrega redireciona sempre pra tela de projeto. Tá uma salada esse MVC aqui. Só queria algo que pudesse bloquear esse request. Hum…

# <a href="main.html"> <span class="btnGlobal"> <input type="submit" id="postSaveDraft" value="Save"></input> </span> </a>

L

Gente resolveu ó... o javascript ficou assim:

function validField(){      
   
    var p = document.programform;  
    var sDiv = document.getElementById("alertProgram");  
      
     if (p.acronym.value=="" || p.descrip.value==")  
     {  
      sDiv.style.visibility = "visible";  
      p.acronym.focus();  
     return false;  
     } else{
          document.forms["validField"].submit();  
          return true;  
        }
 }

e eu tirei aquele "href" do button... ai ficou assim:

no html
<a >      
     <span class="btnGlobal">    
         <input type="submit" id="postSaveDraft" value="Save"></input>    
     </span>                      
 </a>

Ai funfou! =D

Coisa boba né... =]

Criado 26 de janeiro de 2010
Ultima resposta 28 de jan. de 2010
Respostas 5
Participantes 2