2010-10-14 3 views
6

Ich habe Erfahrung mit Spring MVC und probiere Stripes aus, um zu entscheiden, ob ich es für ein neues Projekt ausprobieren möchte.Stripes MVC Model Data

In Spring MVC Ich würde Modelldaten vorbereiten und sie an die Ansicht übergeben, indem ich sie zu einer Map in der ModelAndView-Instanz hinzufüge, die von meinem Controller erstellt wurde. Ich habe Probleme, das Entsprechende für Stripes zu finden.

Es scheint als wäre die nächste Parallele eine ActionBean zu haben, um meine Modelldaten vorzubereiten und sie zur HttpSession hinzuzufügen. Ein ForwardRedirect wird verwendet, um die Ansicht zu laden, und auf die Daten wird von der Sitzung zugegriffen.

Gibt es eine bessere Unterstützung für einen Frontcontroller von Stripes, oder ist das ein völlig anderes Konstruktionsprinzip als Spring MVC? (dh ich muss Methoden aus der Ansicht aufrufen, die EL zum Abrufen von Daten verwenden, wie einige Beispiele zeigen)

Vielen Dank!

+0

Ich mag es nicht die Methode der Zugabe der Modelldaten in die Http, wie es wirklich int Anfrage Umfang für die meisten Seitenanfragen gespeichert werden sollen , nicht der Sitzungsumfang.Dies ist nur die engste gleichwertige Unterstützung, die ich für Streifen gefunden habe. – idle

+0

ActionBean ist sowohl der Controller (Action) als auch die Elternmodelldaten (Bean). ;) – yihtserns

Antwort

5

Ein typisches MVC-Design in Stripes würde so aussehen wie der Code unten.

Die JPA-Entity wird automatisch von einem Stripes-Interceptor geladen, der von Stripersist bereitgestellt wird (dies kann aber auch problemlos on your own implementiert werden, wenn Sie dies wünschen). In diesem Beispiel lädt die Anforderung http://your.app/show-order-12.html eine Bestellung mit der ID 12 aus der Datenbank und zeigt sie auf der Seite an.

Controller (OrderAction.java):

@UrlBinding("/show-order-{order=}.html") 
public class OrderAction implements ActionBean { 
    private ActionBeanContext context; 
    private Order order; 

    public ActionBeanContext getContext() { 
     return context; 
    } 

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

    public void setOrder(Order order) { 
     this.order = order; 
    } 

    public String getOrder() { 
     return order; 
    } 

    @DefaultHandler 
    public Resolution view() { 
     return new ForwardResolution(“/WEB-INF/jsp/order.jsp”); 
    } 
} 

Ansicht (order.jsp):

<html><body> 
    Order id: ${actionBean.order.id}<br/> 
    Order name: ${actionBean.order.name)<br/> 
    Order total: ${actionBean.order.total)<br/> 
</body></html> 

Model (Order.java):

@Entity 
public class Order implements Serializable { 
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Integer id; 

    private String name; 
    private Integer total; 

    public String getName() { 
     return name; 
    } 

    public Integer getTotal() { 
     return total; 
    } 
} 

BTW ist es ein wirklich ausgezeichnetes kurzes Buch auf Streifen, die all diese Dinge deckt (!):

Stripes: ...and Java Web Development Is Fun Again

+0

Großartig! Danke für die Erklärung und das perfekte Beispiel. :) – idle

1

Okay, ich habe es herausgefunden. Attribute hinzugefügt, um die HttpServletRequest (aus dem Kontext abgerufen) in der Seite verfügbar, um die ForwardRedirect

IE context.getRequest Empfangen() setAttribute ("attr1", "Anfrage Attribut 1."); return new ForwardResolution ("/ WEB-INF/pages/hello.jsp");

In hello.jsp $ {attr1} ist verfügbar ... yay!

+1

Das ist nicht, wie Sie MVC in Stripes normalerweise tun würden ... – Kdeveloper