seguinte, possuo uma classe que faz o controle de um objeto na sessao para mim.
[code]@Component
@RequestScoped
public class EmpresasWeb {
private HttpSession session;
private List<Empresa> empresas = new ArrayList<Empresa>();
private HttpServletRequest request;
public EmpresasWeb(HttpSession session, HttpServletRequest request) {
this.session = session;
this.request = request;
inserirEmpresaNaSessao();
}
public void inserirEmpresaNaSessao() {
if(this.request.getSession().getAttribute("empresas") == null) {
this.request.getSession().setAttribute("empresas", this.empresas);
}
}
@SuppressWarnings("unchecked")
public List<Empresa> getEmpresas() {
if(this.request.getSession().getAttribute("empresas") != null) {
return (List<Empresa>) this.request.getSession().getAttribute("empresas");
}
return empresas;
}
public void setEmpresas(List<Empresa> empresas) {
this.empresas = empresas;
}
}[/code]
e estou usando isso no meu controller Usuario
[code]
@Resource
public class UsuarioController {
private final UsuarioRepositorio userRep;
private final Result result;
private final EmpresaRepositorio empresaRep;
private final EmpresasWeb empresas;
public UsuarioController(UsuarioRepositorio rep, Result result, EmpresaRepositorio empresaRep, EmpresasWeb empWeb) {
this.userRep = rep;
this.result = result;
this.empresaRep = empresaRep;
this.empresas = empWeb;
}
public void formulario() {
}
public List<Usuario> listar() {
return this.userRep.listAll();
}
public void salvar(Usuario usuario) {
Integer codigo = usuario.getCodigo();
if(codigo == null || codigo == 0) {
List<UsuarioCompany> companies = povoaUsuarioCompany(usuario);
usuario.setEmpresas(companies);
usuario.getPermissao().add("ROLE_USUARIO");
usuario.setAtivo(true);
this.userRep.save(usuario);
} else {
this.userRep.update(usuario);
}
result.redirectTo(this).listar();
}
private List<UsuarioCompany> povoaUsuarioCompany(Usuario usuario) {
List<UsuarioCompany> companies = new ArrayList<UsuarioCompany>();
for(Empresa e : empresas.getEmpresas()) {
UsuarioCompany u = new UsuarioCompany();
u.setCodigoDoUsuario(usuario);
u.setCodigoExterno(e.getCodigo());
}
return companies;
}
@Post
@Path("/usuario/ativar/{id}")
public void ativar(int id) {
Usuario usuario = this.userRep.load(id);
if(usuario.isAtivo())
usuario.setAtivo(false);
else
usuario.setAtivo(true);
this.userRep.update(usuario);
result.redirectTo(this).listar();
// result.nothing();
}
@Post
@Path("/usuario/addEmpresaTemp/{codigoExterno}")
public void addEmpresaTemp(int codigoExterno) {
if(codigoExterno != 0 ) {
Empresa emp = this.empresaRep.findEmpresaById(codigoExterno);
this.empresas.getEmpresas().add(emp);
}
result.use(Results.json()).withoutRoot().from(empresas.getEmpresas()).serialize();
}
@Post
@Path("/usuario/delEmpresaTemp/{codigoExterno}")
public void delEmpresaTemp(int codigoExterno) {
if(codigoExterno != 0 ) {
Empresa emp = this.empresaRep.findEmpresaById(codigoExterno);
this.empresas.getEmpresas().remove(emp);
}
result.nothing();
}[/code]
quando chamo o addEmpresaTemp efetuando o this.empresas.getEmpresas().add(emp); eu adiciono os objetos e talz, e quando vou salvar eu mais uma vez chamo this.empresas.getEmpresas() porem a lista que vem, vem sem objetos ou seja, size 0, toda vez que eu add uma nova empresa eu preciso setar essa lista atualizada na sessao ou o java ja seta pra mim?