Pregunta

Cuando estaba usando Play 1.2, pude anotar algunos métodos dentro de cualquier controlador con @Before o @After (y otros...) para ejecutar un método antes o después de cada solicitud dentro de este controlador.

¿Cómo puedo hacer esto en Play 2.0?

Leí un poco sobre el objeto Global, pero no parece ser lo que estoy buscando.Además, la composición de la acción parece demasiado compleja para lo que quiero hacer.Espero ver algo más simple.

¿Algunas ideas?

¿Fue útil?

Solución

Desafortunadamente, tendrás que usar composición de acción Para el @Before, y no existe equivalente para el @After.

Para el @After, yo escribiría el mío after método al final de la acción final;algo como esto:

public static Result index() {
    ....
    Result result = ...;
    return after(result);
}

protected static Result after(Result result) {
    ...
    Result afterResult = ...,
    return afterResult

}

Otros consejos

public class Logging {

    @With(LogAction.class)
    @Target({ElementType.TYPE, ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Logs {

    }

    public static class LogAction extends Action<Logs> {

        private void before(Context ctx) { 
            System.out.println("Before action invoked");
        } 

        private void after(Context ctx) { 
            System.out.println("After action invoked");
        } 

        public F.Promise<Result> call(Http.Context context) throws Throwable {
            before(context); 
            Promise<Result> result = delegate.call(context);
            after(context);
            return result; 
        }
    }

}

anotando con @logs en su controlador.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top