2010-10-14 69 views
6

我经历了Spring MVC和我尝试条纹决定是否要尝试一下新的项目。条纹MVC模型数据

在Spring MVC我会做好准备的模型数据,并通过将其添加到我的控制器创建的ModelAndView实例的地图把它传递给视图。我无法为Stripes找到相同的结果。

这似乎是最接近的平行是有一个ActionBean中准备我的模型数据,并将其添加到HttpSession中。 ForwardRedirect用于加载视图并从会话访问数据。

有由条纹提供了一个前端控制器更好的支持,或者这是一个完全不同的设计原则比Spring MVC的? (即我必须调用使用EL检索数据从视图的方法,因为一些例子做)

谢谢!

+0

我不喜欢加入模型数据到HttpSession的方法,因为它应该被存放INT请求范围对于大多数页面请求,而不是会话范围。这是我已经能够找出条纹最接近的等效支持。 – idle 2010-10-14 07:12:24

+0

ActionBean既是控制器(Action)又是父模型数据(Bean)。 ;) – yihtserns 2010-10-16 16:24:09

回答

5

的条状典型的MVC设计看起来像类似下面的代码。

JPA实体自动加载由Stripersist提供的Stripes拦截器(但如果您愿意,也可以轻松实现on your own)。因此在这个例子中,请求http://your.app/show-order-12.html将从数据库中加载一个ID为12的订单,并将其显示在页面上。

控制器(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”); 
    } 
} 

视图(order.jsp):

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

模型(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有一个真正优秀的小书上的条纹,覆盖了所有这些事情(!):

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

+0

太棒了!感谢您的解释和完美的例子。 :) – idle 2010-10-15 16:05:16

1

好吧我已经想通了。添加到HttpServletRequest(从上下文获取)的属性在接收ForwardRedirect的页面中可用。在context.getRequest()。setAttribute(“attr1”,“request属性1”)中提供的属性可用于接收ForwardRedirect的页面。 返回新的ForwardResolution(“/ WEB-INF/pages/hello.jsp”);

在hello.jsp $ {attr1} 可用...耶!

+1

这不是你典型的在Stripes中做MVC的方式...... – Kdeveloper 2010-10-14 23:30:17