Possuo uma lista no meu controller que está da seguinte forma.
public class UsuarioController {
private final UsuarioRepositorio userRep;
private final Result result;
private final EmpresaRepositorio empresaRep;
private List<Empresa> empresas = new ArrayList<Empresa>();
public UsuarioController(UsuarioRepositorio rep, Result result, EmpresaRepositorio empresaRep) {
this.userRep = rep;
this.result = result;
this.empresaRep = empresaRep;
}
public void formulario() {
this.result.include("empresaList", this.empresas);
}
//outros metodos...
@Post
@Path("/usuario/addEmpresa/{codigoExterno}")
public void addEmpresa(int codigoExterno) {
if(codigoExterno != 0 ) {
Empresa emp = this.empresaRep.findEmpresaById(codigoExterno);
this.empresas.add(emp);
}
}
e na minha pagina, estou fazendo o seguinte:
//adicionar empresa;
$(document).ready(function(){
$('#addEmpresa').on('click', function(){
oTable = $('#empresaList').dataTable();
var self = $('#codigoDaEmpresa');
var selecionado = self.val(); // pega o codigo digitado no input
$.ajax({
url:'<c:url value="/usuario/addEmpresa/" />'+selecionado,
type: 'POST',
dataType:'json',
success:function(data){
oTable.fnReloadAjax();
},
error:function(){
alert('Erro');
}
});
});
});
eu queria que toda vez que clicasse no botao addEmpresa ele envie o codigo da empresa, e no metodo ele vai recuperar a empresa, adicionar na lista e efetuar o update na tabela, mais só está dando error.
Maaarkin, isso pode estar acontecendo porque vc não colocou um retorno para o seu controller addEmpresa, sendo que o seu $.ajax() espera isso!!! Você pode fazer duas coisas, ou vc adiciona um retorno no seu controller addEmpresa para o seu $.ajax() “Mas para isso vc precisaria serializar em JSon”, ou vc usa um result para enviar ao outro método!!!
@Post
@Path("/usuario/addEmpresa/{codigoExterno}")
public void addEmpresa(int codigoExterno) {
if(codigoExterno != 0 ) {
Empresa emp = this.empresaRep.findEmpresaById(codigoExterno);
this.empresas.add(emp);
this.result.use(Results.json()).withoutRoot()
.from(this.empresas)
.serialize();
}
}
ou isto (So que neste caso ele recarregaria a página)
public void formulario() {
this.result.include("empresaList", this.empresas);
}
@Post
@Path("/usuario/addEmpresa/{codigoExterno}")
public void addEmpresa(int codigoExterno) {
if(codigoExterno != 0 ) {
Empresa emp = this.empresaRep.findEmpresaById(codigoExterno);
this.empresas.add(emp);
this.result.redirect(this).formulario();//Adicionei isto
}
}
Obs*: O “novo” guj de Perguntas e Respostas se encaixaria melhor neste tipo de questão!!
mais ai que está se eu fizer esse result redirect, eu vou atualizar a pagina e vou acabar perdendo os outros dados que estao ativos em ajax.
Então tenta fazer do primeiro jeito, passa com Results.json()!!
Bem, estou conseguindo agora povoar meu datatable, mais agora me
surgiu um outro imprevisto, estou adicionando os objetos corretamente,
ja esta mostrando tudo direitim, porem está efetuando sempre uma nova
lista. Por exemplo, quando adiciono um objeto novo ele em vez de
mostrar a lista com 2 objetos mostra só com um, estou suspeitando que
por minha lista está private List empresas = new
ArrayList(); ele toda vez que efetua o request ele cria uma
nova lista e adiciona o objeto, de forma que sempre vai me retornar um
por motivo do controller ser request scope (eu axo), tem como
contornar isso sem trabalhar com o controller do tipo Session?
Tem sim, você pode colocar @SessionScoped em uma classe para guardar essa lista, assim toda nova sessão aberta, vai durar até acabar, durando quantas requisições foram necessárias nesse período!
Na verdade é melhor que nesse caso vc trabalhe com session mesmo, se eu não me engano existem 3 tipos de escopo no Vraptor (@ApplicationScoped, @SessionScoped e @RequestScoped)!!! “Request é o default”
Boa Noite Pessoal,
Maaarkin vc conseguiu resolver o problema? vc está usando o plugin Jquery Data Tables? vc poderia postar seu html e seu controller?
tou tentando implementar uma busca, onde o usuario digita o nome de uma pessoa clica no botão e atualiza a lista com o resultado da query,mas tou apanhando feito um condenado pois não manjo muito de jquery/js
Opa rj, resolvi sim, estou usando jquery datatable + twitter bootstrap, e quanto ao campo de busca, nem precisa implementar brother, o proprio jquery datatable lhe fornece um campo de busca (já funcionando) quando vc utiliza ele.
quando eu chegar no trabalho te informo a parte do codigo relativo ao que você quer fazer.
mais basicamente é você estar com o import do jquery na pagina ou no template
na pagina que vc quer o datatable vc faz um
[code]
//headers
//forEach montando os
|
[/code]
no controller / metodoReferenteAPagina
vc efetua o result.include("minhaLista", objectDAO.listarTudo());
com esse ${minhaLista} é um list, você utilizará ele para fazer um forEach.
e a parte de busca quando vc executa aquele ele já insere a busca acima da table pra você.
Maaarkin, agradeço a contribuição !!! obrigado,vou fazer uns testes aqui e depois posto o resultado
abraço!