2010-10-14 23 views
6

Tengo experiencia con Spring MVC y estoy probando Stripes para decidir si probarlo para un nuevo proyecto.Stripes MVC Model Data

En Spring MVC Prepararía los datos del modelo y los pasaría a la vista agregándolos a un mapa en la instancia de ModelAndView creada por mi controlador. Tengo problemas para encontrar el equivalente de esto para Stripes.

Parece que el paralelo más cercano es tener un ActionBean para preparar los datos de mi modelo y agregarlos a la HttpSession. Se usa ForwardRedirect para cargar la vista y se accede a los datos desde la sesión.

¿Hay mejor soporte para un controlador frontal proporcionado por Stripes, o este es un principio de diseño totalmente diferente que Spring MVC? (es decir, tengo que invocar métodos desde la vista utilizando EL para recuperar datos, como lo hacen algunos de los ejemplos)

¡Gracias!

+0

no me gusta el método de añadir los datos del modelo a la HttpSession, ya que realmente se debe almacenar solicitud int alcance para la mayoría de las solicitudes de página , no el alcance de la sesión.Este es el soporte equivalente más cercano que he podido descifrar para las rayas. – idle

+0

ActionBean es tanto el controlador (Acción) como los datos del modelo principal (Bean). ;) – yihtserns

Respuesta

5

Un diseño típico de MVC en Stripes se parecería más o menos al siguiente código.

La entidad JPA se cargan de forma automática mediante un interceptor de rayas proporcionada por Stripersist (pero esto también se puede implementar fácilmente on your own si lo desea). Por lo tanto, en este ejemplo, al solicitar http://your.app/show-order-12.html, se cargará un pedido con el ID 12 de la base de datos y se mostrará en la página.

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

Ver (order.jsp):

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

Modelo (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; 
    } 
} 

Por cierto hay una corta realmente excelente libro sobre las rayas que cubre todas estas cosas (!):

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

+0

¡Genial! Gracias por la explicación y el ejemplo perfecto. :) – idle

1

Bien, lo he descubierto. Atributos añadidos a la HttpServletRequest (recuperado de contexto) están disponibles en la página de recepción de la ForwardRedirect

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

En hello.jsp $ {attr1} está disponible ... ¡yay!

+1

Así no es como típicamente harías MVC en Stripes ... – Kdeveloper

Cuestiones relacionadas