2015-08-15 6 views
6

Possiamo impostare gli attributi della richiesta utilizzando l'oggetto Model o ModelAndView in primavera.Come aggiungere un oggetto all'ambito dell'applicazione in primavera

Possiamo usare @SessionAttributes per mantenere gli attributi nello scope di sessione.

Quindi come posso inserire un attributo nello scope application in primavera, molla ha fornito qualche annotazione per quello?

risposta

8

In pratica tutto ciò che è necessario per configurare un ambito di applicazione è quello di utilizzare il ServletContext, e si può farlo in primavera come segue:

public class MyBean implements ServletContextAware { 

    private ServletContext servletContext; 

    public void setServletContext(ServletContext servletContext) { 
     this.servletContext = servletContext; 
    } 

} 

javax.servlet.ServletContext potrebbe essere anche iniettato per l'implementazione di fagioli come segue:

@Component 
public class MyBean { 

    @Autowired 
    private ServletContext servletContext; 

    public void myMethod1() { 
     servletContext.setAttribute("attr_key","attr_value"); 
    } 

    public void myMethod2() { 
     Object value = servletContext.getAttribute("attr_key"); 
     ... 
    } 

} 
+0

Grazie mille Francisco, come da documentazione di primavera per @SessionAttributes - http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/SessionAttributes.html, sembra esserci qualche restrizione, puoi dirmi per favore qual è la restrizione e in che modo è diversa dagli attributi delle sessioni regolari. Qual è il modo corretto di archiviare nell'ambito della sessione. per favore fatemi sapere se ho bisogno di creare una domanda separata per questa query. – Chaitanya

+0

Prego. Non ho ricevuto la tua domanda, cosa intendi con restrizione? –

+0

Pubblicherò una domanda a parte con dettagli completi sul problema con la sessione, grazie mille per l'aiuto. – Chaitanya

1

Quando si parla di memorizzare il modello in ambito applicazione, concluderei che si desidera memorizzarlo a livello ServletContext. Per fare questo è necessario che il controller implementa l'interfaccia ServletContextAware.

import org.springframework.web.context.ServletContextAware; 

// ... 

public class MyController implements ServletContextAware { 

private ServletContext context; 
    public void setServletContext(ServletContext servletContext) { 
    this.context = servletContext; 
    } 

Dopo aver ottenuto l'accesso al ServletContext è possibile aggiungerlo come attributo

servletContext.setAttribute("modelKey", modelObject); 

Gentilmente vorrei sapere se questo è quello che stai cercando.

0

In primavera si può ottenere portata di applicazione utilizzando annotazione @Autowired

@Autowired 
private ServletContext servletContext; 

Poi si può accedere voi elemento utilizzando il metodo .getAttribute

Object someObj = servletContext.getAttribute("object",someObj); 
if(someObj==null) 
someObj = new Object(); //This will create new Object if it doesn't exists. 
servletContext.setAttribute("object",someObj);