cancel
Showing results for 
Search instead for 
Did you mean: 

DeclarativeWebScript in Alfresco 4.0

emmy
Champ in-the-making
Champ in-the-making
Ciao,
ho installato la versione 4.0.d di Alfresco e sto verificando che le implementazione fatte per alfresco 3.4 vadano anche con alfresco 4.0.
Ho implementato parecchi DeclarativeWebScript e ho sovrascritto il metodo executeImpl come descritto nella documentazione

@Override
protected Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache) {
   HttpServletRequest servletReq = ((WebScriptServletRequest) req).getHttpServletRequest();
        ….
}
Con Alfresco 3.4 recuperavo l'HttpServletRequest in modo poi da recuperare i parametri della request.
Eseguendo il declarativewebscript con Alfresco 4.0  ho notato che il cast a HttpServletRequest non funziona più, perchè il WebScriptRequest passato come parametro è un RepositoryContainer@BufferedRequest.
C'è un modo per recuperare l'HttpServletRequest?

Grazie in anticipo,
Emanuela
1 REPLY 1

openpj
Elite Collaborator
Elite Collaborator
L'esempio pubblicato nella wiki, che ho aggiornato proprio qualche giorno fa, dovrebbe funzionare solo nel caso in cui il WebScript venga chiamato direttamente all'interno di una richiesta diretta all'interno di un tag HTML, come ad esempio il tag IMG.

Dall'ultima versione di Spring WebScripts mi sembra che non permetta di accedere direttamente alla request HTTP, nel caso di una call diretta WebScript.
In ogni caso suppongo tu possa sempre ottenere il contesto servlet nell'implementazione andando ad implementare il ServletContextAware in questo modo:


public class SimpleDeclarativeWebScript extends DeclarativeWebScript implements ServletContextAware {

private ServletContext servletContext;

@Override
protected Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache) {
   HttpServletRequest servletReq = ((WebScriptServletRequest) req).getHttpServletRequest();
        ….
}

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

}
In questo modo viene sfruttata la dependency injection di Spring per fare in modo di ottenere le informazioni necessarie della richiesta HTTP direttamente dal contesto servlet di Spring WebScript, che attualmente viene wrappato internamento senza poterlo vedere direttamente da nessun metodo pubblico della API.

Spero ti possa aiutare  Smiley Wink