Dúvida com submit em form diferentes

8 respostas
A

Bom seguinte pessoal, estou iniciando na programação web com jsp/servlet e preciso fazer o seguinte:

Uma página que faz o upload de um arquivo (essa parte eu jah fiz)
e logo abaixo dois campos para o usuario digitar seu login e senha.

Bom no primeiro form de minha pagina eu deixei a parte do upload e o segundo form (abaixo) deixei os campos de digitação do usuário. Porém eu quero fazer o seguinte… eu sei que o submit vai carregar a pagina inteirona, mas eu nao quero isso. Quero que quando o usuario escolher o seu arquivo para fazer o upload e apertar o botão “fazer upload” ele faça o upload do arquivo e já vai mostrar uma mensagem “arquivo válido” ou “arquivo inválido”, sem carregar a página toda. E depois no botão de submit abaixo seria para o usuário seguir para a proxima página (se caso seus dados estiverem corretos). Porém no primeiro form eu tenho que usar o método POST para fazer o download… e com esse método eu não consigo usar o metodo getAttribute para pegar as outras informações do formulario…

Em geral preciso fazer o seguinte:

–> pegar o upload de um arquivo
–> pegar os dados do usuario e seguir pra proxima pagina

alguem tem uma dica?

8 Respostas

rodrigoalmeida

Não achei coerente sua idéia, mas posso está errado. Penso que para o usuário fazer o upload o usuário tem que está logado e não fazer isso antes. Acho mais coerente ele ir para uma página de login e depois se o login estiver válido ele ir para outra página para fazer o upload.

Para fazer requisições sem recarregar a página você vai ter que usar ajax, mas como disse antes, não vejo sentido logar e fazer upload ao mesmo tempo, porque essas ações dependem da validação das outras.

A

Sim faz sentido vc pensar isso, mas no meu caso é assim mesmo. Tenho que fazer isso em uma página só pois o arquivo a fazer o upload é um arquivo de configuração + o usuario e senha dele, eu preciso de todos esses itens de uma vez… ou posso tb guardar as referências do arquivo de upload

como posso usar um objeto para mais de uma página jsp? por exemplo ele entra com o login e senha, e depois preciso pegar esses mesmos dados na segunda página.
seria mais facil fazzer isso doq usar ajax?

Masami

-pelo q entendi vc vai fazer uma pagina de cadastro de usuário, a imagem seria o avatar, isso?
-que validação vc deseja fazer na imagem?
-para q fim vc vai utilizar o getAttribute?

… se postar seu código fica mais fácil entender e lhe ajudar…

A
Masami:
-pelo q entendi vc vai fazer uma pagina de cadastro de usuário, a imagem seria o avatar, isso? -que validação vc deseja fazer na imagem? -para q fim vc vai utilizar o getAttribute?

... se postar seu código fica mais fácil entender e lhe ajudar..

Não é cadastro mas se fizer uma analogia seria igual como vc disse...

Segue o meu form para fazer o upload do arquivo xml.
<form name="myform" enctype="multipart/form-data" method="post" onsubmit="return validate();" action="ControllerServlet">
<h3>${mensagem}</h3>
<table align="center">
	<thead >
		<tr valign="middle" style="height: 18px; ">
			<th colspan="2"> Procure seu XML </th>
		</tr>					
	</thead>
	<tr>
		<td>
			<input name="xml" type="file" accept="xml" id="xml" class="dados" >
		</td>
		<td>
			<input type="submit" id="upld" name="upload" value="Fazer Upload"> 
		</td>			
</table></form>
Este seria o form para fazer o upload de um arquivo XML que é usado em uma configuração. A função javascrit em onsubmit="return validate();" é só pra validar a extensão do arquivo, assegurando que é um XML. Bom o segundo form para pegar o login e senha do usuário é:
<form name="form2" action="ControllerServlet">
<h3>${mensagemUsuario}</h3>
<table align="center">
	<thead >
		<tr valign="middle">
			<th colspan="2"> Informe seus dados </th>
		</tr>					
	</thead>
	<tr>
		<td>
			<input name="login" type="text">
		</td>
		<td>
			<input name="senha" type="text">
		</td>		
	        <td>
			<input type="submit" name="dados" value="Mandar Dados"> 
		</td>	
</table></form>
é mais ou menos assim... daí no meu controllerservlet preciso pegar os valores digitados em login e senha com o .getAttribute e fazer o upload do arquivo. Porém para afzer o upload preciso dessa linha aqui:
<form name="myform" enctype="multipart/form-data" method="post" onsubmit="return validate();" action="ControllerServlet">
e com o método post não consigo acessar o .getAttribute... se eu conseguisse eu faria tudo em um form só e com um submit apenas normalmente, como eu posso fazer isso gente?
rodrigoalmeida

Se a página ficar com dois botões de enviar, para mim ainda vai ser mais simples usar páginas separadas para cada coisa, do que usar ajax (não que ajax seja complicado, mas como você disse que estava iniciando, você teria que estudar mais coisas). Porém, se com apenasuma ação o sistema deverá fazer o upload e autenticar o usuário fará sentido ficar tudo em uma página só.

Se você estiver pensando em fazer como no segundo caso, não terá problemas em pegar os atributos vindos na requisição por post de um formulário multipart. Eu fiz isso usando http://commons.apache.org/fileupload/, passando por todos aos atributos da requisição sendo do tipo FILE ou não, asssim você pegaria os campos de login e o arquivo.

A

rdgse:
Se a página ficar com dois botões de enviar, para mim ainda vai ser mais simples usar páginas separadas para cada coisa, do que usar ajax (não que ajax seja complicado, mas como você disse que estava iniciando, você teria que estudar mais coisas). Porém, se com apenasuma ação o sistema deverá fazer o upload e autenticar o usuário fará sentido ficar tudo em uma página só.

Se você estiver pensando em fazer como no segundo caso, não terá problemas em pegar os atributos vindos na requisição por post de um formulário multipart. Eu fiz isso usando http://commons.apache.org/fileupload/, passando por todos aos atributos da requisição sendo do tipo FILE ou não, asssim você pegaria os campos de login e o arquivo.

Eu estou usando o commons fileupload para pegar arquivo e fazer o upload, mas como consigo pegar os atibutos de login e senha da pagina? teria um exemplo?

rodrigoalmeida
html
<form action="UploadoDo" enctype="multipart/form-data" method="post">
            Nome:<input type="text" id="nome" name="nome"/><br/>
            <input type="file" id="arquivo" name="arquivo"/>
            <input type="submit"/>
        </form>

Servlet

String nome = "";
InputStream input = null;
 String fileName = null;

FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(request);

for (FileItem fileItem : items) {
  if (!fileItem.isFormField() && fileItem.getFieldName().equals("arquivo")) {
     input = fileItem.getInputStream();
     fileName = fileItem.getName();
  } else if (fileItem.isFormField() && fileItem.getFieldName().equals("nome")) {
     nome = fileItem.getString();
   }
}

Referencia:
[url]http://commons.apache.org/fileupload/using.html[/url]

A

Muito obrigado, enfim um exemplo prático e funcional!

Criado 2 de outubro de 2010
Ultima resposta 5 de out. de 2010
Respostas 8
Participantes 3