将Struts-Tiles迁移到Spring + tiles 3

时间:2015-01-08 16:46:58

标签: java spring-mvc migration struts-1 apache-tiles

我从Strut1 + Tiles项目迁移到SpringMVC和Apache Tiles 3。我只知道一点Struts1 + Tiles,它太旧了,我在Struts-tiles中陷入了Controller和ComponentContext。根据来自apache网站的文档,它被ViewPreparer和AttributeContext取代,但我不知道以下行意味着:
ComponentContext compContext=(ComponentContext)pageContext.getAttribute(ComponentConstants.COMPONENT_CONTEXT,PageContext.REQUEST_SCOPE);
什么是ComponentConstants.COMPONENT_CONTEXT?以及如何将ComponentContext更改为AttributeContext

请帮助,谢谢。

3 个答案:

答案 0 :(得分:0)

设置了Spring-4和Tiles-3集成(这里有关于Spring的文档以及一些很好的教程)然后你在jsps中可以使用你在spring模型图中输入的属性,这不是与AttributeContext相关。

另一方面,AttributeContext(基本上)仅用于保存属性的映射。这里的属性是在定义中定义的,用于标识模板或字符串属性(通常在xml定义中声明),并带有role,renderer,expression和/或value的属性。

如果您正在使用AttributeContext:您可以通过当前的tilesContainer获取它,并获取当前容器使用静态TilesAccess,例如

TilesContainer tileContainer = TilesAccess.getCurrentContainer(request);
AttributeContext attributeContext = tilesContainer.getAttributeContext(request);

答案 1 :(得分:0)

比迪,  阅读http://tiles.apache.org/framework/tutorial/advanced/runtime.html

特别是“使用API​​的运行时组合”部分。

TilesContainer container = TilesAccess
        .getContainer(request.getSession().getServletContext());

Request tilesRequest = new ServletRequest(
        container.getApplicationContext(), 
        request, 
        response);

否则我建议你深入了解Tiles代码库,这不是复杂的代码,特别是TilesAccess,Request,ApplicationContext的东西。

答案 2 :(得分:0)

Bidi,有两种获取AttributeContext的方法:

第一个,就像mck所说:通过" org.apache.tiles.AttributeContext.STACK"请求范围的关键。但是,该值是一个包含2个AttributeContext类型元素的STACK。我们需要的是第一个元素。恕我直言,这种方式是有限的,因为因为数据结构是一个堆栈,所以也意味着根据FIFO规则从堆栈中删除,所以你只能使用该对象一次。

我在项目中使用第二种方式。因为ViewPreparer的execute()方法已经具有AttributeContext类型的参数,并且每次呈现页面时总是调用此方法,因此您可以在覆盖时使用此对象执行所需的操作(或将其置于请求中)方法。 AttributeContext只是键/值对的集合。通常,人们使用它来访问模板中属性的某些值,因此获取值并将它们放入请求可以节省开销。您还可以创建继承类的一些静态属性并将值设置为它们。