2010-10-14 13 views
6

Ho esperienza con Spring MVC e sto provando Stripes per decidere se provarlo per un nuovo progetto.Stripes Dati modello MVC

In Spring MVC vorrei preparare i dati del modello e passarlo alla vista aggiungendolo a una mappa nell'istanza ModelAndView creata dal mio controller. Sto avendo difficoltà a trovare l'equivalente di questo per Stripes.

Sembra che il parallelo più vicino sia disporre di un ActionBean per preparare i dati del modello e aggiungerlo a HttpSession. Un ForwardRedirect viene utilizzato per caricare la vista e i dati sono accessibili dalla sessione.

C'è un supporto migliore per un controller anteriore fornito da Stripes, oppure si tratta di un principio di progettazione completamente diverso rispetto a Spring MVC? (cioè devo richiamare i metodi dalla vista usando EL per recuperare i dati, come fanno alcuni esempi)

Grazie!

+0

non mi piace il metodo di aggiungere i dati del modello per il HttpSession, come in realtà dovrebbe essere conservato richiesta int portata per la maggior parte le richieste di pagina , non l'ambito della sessione.Questo è solo il supporto equivalente più vicino che sono stato in grado di capire per le strisce. – idle

+0

ActionBean è sia il controller (Azione) che i dati del modello principale (bean). ;) – yihtserns

risposta

5

Un tipico design MVC in Stripes potrebbe essere simile al seguente codice.

L'entità JPA viene automaticamente caricata da un intercettore Stripes fornito da Stripersist (ma può anche essere facilmente implementato on your own se lo si desidera). Pertanto, in questo esempio, la richiesta di http://your.app/show-order-12.html caricherà un ordine con ID 12 dal database e lo mostrerà sulla pagina.

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”); 
    } 
} 

View (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 v'è un davvero eccellente breve libro su Stripes che copre tutte queste cose (!):

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

+0

Great! Grazie per la spiegazione e l'esempio perfetto. :) – idle

1

Ok, l'ho capito. Attributi aggiunti a HttpServletRequest (recuperati dal contesto) SONO disponibili nella pagina che riceve ForwardRedirect

IE context.getRequest(). SetAttribute ("attr1", "request attribute 1"); return new ForwardResolution ("/ WEB-INF/pages/hello.jsp");

In ciao.jsp $ {attr1} è disponibile ... sì!

+1

Questo non è il modo in cui ti piacerebbe fare MVC in Stripes ... – Kdeveloper