Iniciando com Ajax-dwr

2 respostas
V

Pessoal,

Estou desenvolvendo um sistema com struts. Na verdade eu gostaria que o usuario, ao clicar em um link, por exemplo, Cadastrar Funcionario, ao inves deste jsp redirecionar para outro formulario jsp (cadastrar funcionario.jsp), o sistema deveria apenas abrir os campos do formulario na mesma página.
Eu não sei se deve ser feito na mesma pagina jsp, ou a pagina principal(que contem o link Cadastrar Funcionario) “abre” a pagina cadastrarfuncionario.jsp dentro dela.

Peguei uns exemplos sobre o dwr mas eles envolvem classes javas de persistencia. Acredito que o meu problema é mais a nivel de interface.

Seria mais ou menos como a agenda do google, quando clicamos em um determinado link, é aberto alguns campos para serem preenchidos na mesma pagina.

Como que eu faco isso usando dwr???
O que eu fiz ateh agora foi apenas colocar o dwr.jar no lib e configurar o web.xml

Qualquer dica é bem vinda!!!
Obrigado
victor

2 Respostas

H

Olá, desculpa a demora, bem vou tentar passar isso pra vc…

Você cria uma tabela.

Trecho do HTML

<form id="formulario" name="formulario" action="">
	      <table border="1" align="center" cellpadding="0" cellspacing="0">
	      <thead>
	        <tr>
	          <td>Id</td>
	          <td>Nome</td>
	          <td>Login</td>
                  <td>Ações</td>
	        </tr>
	       </thead>
	        <tbody id="tbodyUsuarios"></tbody>
	        <tbody id="tformulario"></tbody>
	      </table>
	 </form>

Agora você gera o seu list.

Trecho do JS

function renderListUsuarios(list){
	DWRUtil.removeAllRows("tbodyUsuarios");
	var cellFuncs = [
						function(bean) { return bean.id; },
						function(bean) { return bean.nome; },
						function(bean) { return bean.login; },
						function(bean) { return '<a href="javascript:abrirFormulario('+ bean.id +');"><img src="img/ico_edit.gif" border="0"/></a> / <a href="javascript:excluirUsuario('+ bean.id +');"><img src="img/bt_excluir.gif" border="0"/></a>'; }
					];
	
	DWRUtil.addRows("tbodyUsuarios", list, cellFuncs, {
		rowCreator:function(optionss){
			var row = document.createElement("tr");
			row.id = optionss.rowData.id;
			
			row.bgColor = "#cccc99";
			row.style.cursor = "pointer";
			
			if(validateBrowser()){
				row.attachEvent("onclick", function(e){abrirFormulario(this.id)});
			}else{
							row.addEventListener("click",function(e){abrirFormulario(this.id)},true);
			}

			return row;
		},
		escapeHtml:false
	});
}

Bem para carregar o formulario vc poderá deixar ele criado e apenas exibir ele ou se preferir…fazer um insert na página que esse dependendo do caso seria bem mais interessante e fácil manutenção como tbm migração ou alteração.

JAVA(No seu FacadeAjax do DWR)

public String setFormulario(String arquivo) throws ServletException, IOException{
	    return WebContextFactory.get().forwardToString("/" + arquivo);
}

Trecho do JS(Função abriFormulário e inserir página)

var beanUserGlobal;
function abrirFormulario(idUsuario){
	var beanUser = {id:idUsuario};
	
	FacadeAjax.getUsuario(beanUser, {
		callback:function(bean){
			
			FacadeAjax.setFormulario('formulario.html',{
								callback:function(data){
									    DWRUtil.setValue("tformulario", data,{escapeHtml:false});
										DWRUtil.setValues(bean,{idPrefix:"usuario"});
										beanUserGlobal = DWRUtil.getValues(bean,{idPrefix:"usuario"});
									},
								errorHandler:function(errorString, exception) {alert(errorString);},
								timeout:50000
								,async:false
							});
							
		},
		errorHandler:function(errorString, exception) {alert(errorString);},
		timeout:50000
		,async:false
	});
}

Sua página que vc deseja inserir(formulario.html) poderia ser um JSP tanto faz.

formulario.html(código COMPLETO)

<tr>
  <td colspan="2"><div align="center">Alterar Usuário</div></td>
</tr>
<tr>
  <td>Nome:</td>
  <td><input type="text" id="usuario.nome" value="" /></td>
</tr>
<tr>
  <td>Login:</td>
  <td> <input type="text" id="usuario.login" value=""/></td>
</tr>
<tr>
  <td>Senha:</td>
  <td><input type="password" id="usuario.senha" value="" /></td>
</tr>
<tr>
  <td>Caracteristicas:</td>
  <td><input type="text" id="usuario.beanCaracteristicas.caracteristica" value="" /></td>
</tr>
<tr>
  <td>Permissões:</td>
  <td>
  	<ol id="olPermissoes"></ol>
  </td>
</tr>
<tr>
  <td align="center"><a href="javascript:alterarUsuario();"><img src="img/bt_salvar.gif" border="0"/></a></td>
  <td align="center"><a href="javascript:limparTBody();"><img src="img/bt_excluir.gif" border="0"/>Cancelar</a></td>
</tr>

Observe que esta página so contem tr nada mais, e se voce observar o primeiro código é o tbody onde vc irá inserir esse trecho acima.

<tbody id="tbodyUsuarios"></tbody> --> Onde será carregada a Grid
<tbody id="tformulario"></tbody> --> Onde será carregado o trecho do formulario.html

Bem é isso qualquer dúvida posta ai…espero ter ajudado.

Esses códigos são de um projeto que estou fazendo para apresentar agora no Sun Tech Day 2007 em Fortaleza, assim que ficar completo vou colocar no meu Blog em Artigos, esse projeto para download.

Abraços

H

Esqueci de comentar sobre isso…não se importe com isso, vc apenas vai ter que criar uma fachada (Facade) para o DWR, uma classe que apenas vai chamar sua classe de negocio. Se vc esta usando struts e esta seguindo bem o padrao e seguindo boas práticas, então vai ser muito simples, vc vai pegar a chamada que esta na sua action e colocar nesse facade para ser chamado no javascript e o resto vc so vai mudar no seu JSP, nada mais, como vc falou é só a VIEW.

Criado 15 de abril de 2007
Ultima resposta 18 de abr. de 2007
Respostas 2
Participantes 2