Pelo o que eu sei, somente os @SessionScoped são acessados por EL (posso estar enganado)
Mas existe solução sim. Cria um interceptor que vai receber essa classe no construtor e depois você joga ela para a view usando o result.include(“varNaEL”, instancia);
[quote=Rafael Guerreiro]Pelo o que eu sei, somente os @SessionScoped são acessados por EL (posso estar enganado)
Mas existe solução sim. Cria um interceptor que vai receber essa classe no construtor e depois você joga ela para a view usando o result.include(“varNaEL”, instancia);[/quote]
[quote=Rafael Guerreiro]Pelo o que eu sei, somente os @SessionScoped são acessados por EL (posso estar enganado)
Mas existe solução sim. Cria um interceptor que vai receber essa classe no construtor e depois você joga ela para a view usando o result.include(“varNaEL”, instancia);[/quote]
[quote=Rafael Guerreiro]Pelo o que eu sei, somente os @SessionScoped são acessados por EL (posso estar enganado)
Mas existe solução sim. Cria um interceptor que vai receber essa classe no construtor e depois você joga ela para a view usando o result.include(“varNaEL”, instancia);[/quote]
Obrigado, cara . Eu estou anotando a classe como @ApplicationScoped (desculpe, faltou isso no codigo que postei), é um escopo maior que o SessionScoped né…então não deveria funcionar?
Segui a sua sugestão e resolveu
@Component @ApplicationScoped
public class Environment {
public String getStaticContext(){
return "/static-resources";
}
}
//interceptador
@Intercepts
public class EnvironmentInterceptor implements Interceptor {
private Environment environment;
private Result result;
public EnvironmentInterceptor(Environment environment, Result result){
this.environment = environment;
this.result = result;
}
@Override
public void intercept(InterceptorStack stack, ResourceMethod method, Object resourceInstance) throws InterceptionException {
result.include("environment", environment);
stack.next(method, resourceInstance);
}
@Override
public boolean accepts(ResourceMethod method) {
return true;
}
}
mas se desse pra acessar na EL direto era bom né :lol: …não tem jeito mesmo nao?
o Environment não deveria estar disponível nos jsps por padrão mesmo. O fato dos componentes @SessionScoped (e @RequestScoped também) serem acessíveis via jsp é um bug que virou feature o Spring gerencia esses escopos colocando atributos na sessão e no request, e a gente acabou levando isso pros outros providers também…
já o applicationScoped a gente resolveu não fazer isso, por ser um componente mais geral que não tem a ver com requests. Mas vc pode resolver isso recebendo um servletContext no construtor e usando um método @PostConstruct assim:
@Component @ApplicationScoped
public class Environment {
public Environment(ServletContext context) {
//guarda num field
}
@PostConstruct
public void registra() {
context.setAttribute("environment", this);
}
}
o Environment não deveria estar disponível nos jsps por padrão mesmo. O fato dos componentes @SessionScoped (e @RequestScoped também) serem acessíveis via jsp é um bug que virou feature o Spring gerencia esses escopos colocando atributos na sessão e no request, e a gente acabou levando isso pros outros providers também…
já o applicationScoped a gente resolveu não fazer isso, por ser um componente mais geral que não tem a ver com requests. Mas vc pode resolver isso recebendo um servletContext no construtor e usando um método @PostConstruct assim:
@Component @ApplicationScoped
public class Environment {
public Environment(ServletContext context) {
//guarda num field
}
@PostConstruct
public void registra() {
context.setAttribute("environment", this);
}
}
assim ele fica acessível do jeito que vc quer.[/quote]
então Lucas eu imaginei que o Environment já estaria disponível dentro do ServletContext, dessa forma acessível no JSP. Eu acho razoável o que voce disse (que os objetos @ApplicationScoped não tem lá muito a ver com requests), mas por outro lado o próprio funcionamento do JSP garante que os objetos do escopo do contexto são visíveis para a EL…então não seria correto expor esses objetos da mesma forma que os @Session e @Request? Ou o Spring não coloca mesmo esses objetos @ApplicationScoped como atributos do contexto?
Aí Lucas tive aula na Caelum ano passado contigo mano :lol: , de EJB. Mundo pequeno, hehe. Valeu pela dica.
Beleza Lucas criei a feature lá…se sobrar um tempinho vou ver se rola de eu fazer um fork lá e implementar essa bagaça aí , de qualquer forma acho que seria uma feature interessante e útil.