2016-04-12 9 views
1

Wie erreiche ich strikt UrlBinding in Stripes? Strict bedeutet für mich, dass es keinen Standard-Handler für undefinierte Ereignisse außer dem leeren Ereignis geben sollte.Strict URLBinding für Streifen

Das Problem existiert auch nur für ein Ereignis, weil es automatisch ein Standardhandler ist. Der folgende Code ist aus dem Stripes Buch entnommen.

@UrlBinding("/hello/{$event}") 
public class HelloActionBean implements ActionBean { 

    private static final String VIEW = "/WEB-INF/jsp/hello.jsp"; 
    private ActionBeanContext ctx; 

    public ActionBeanContext getContext() { 
     return ctx; 
    } 

    public void setContext(ActionBeanContext ctx) { 
     this.ctx = ctx; 
    } 

    private Date date; 
    public Date getDate() { 
     return date; 
    } 

    @DefaultHandler 
    public Resolution currentDate() { 
     date = new Date(); 
     return new ForwardResolution(VIEW); 
    } 

    public Resolution randomDate() { 
     long max = System.currentTimeMillis(); 
     long random = new Random().nextLong() % max; 
     date = new Date(random); 
     return new ForwardResolution(VIEW); 
    } 

} 

Antwort

2

nicht sicher, ob dies in einem allgemeineren ‚Stripes‘ Art und Weise durchgeführt werden (vielleicht Ihre eigene ActionResolver zu schreiben), aber hier ist eine Abhilfe , das ein Verfahren defHandler Satz als @DefaultHandler (statt currentDate) hinzufügt. Diese hinzugefügte Methode wird an currentDate weitergeleitet, wenn für $event kein Wert angegeben wird, andernfalls wird eine 404 ErrorResolution zurückgegeben.

Anfragen für die currentDate und randomDate Ereignisse nicht passieren defHandler weil sie ihre eigenen Handler-Methode haben.

@DefaultHandler 
public Resolution defHandler() { 

    // The request uri 
    Path path = Paths.get(getContext().getRequest().getRequestURI()); 

    // Get the action name from the @UrlBinding value 
    Path action = Paths.get(this.getClass().getAnnotation(UrlBinding.class).value().split("/\\{")[0]); 

    // no event specified -> currentDate 
    if (path.getFileName().equals(action.getFileName())) return currentDate(); 

    // unknown event specified -> 404 
    else return new ErrorResolution(404); 
}