将 Struts-Tiles 迁移到 Spring + tiles 3

Migrate Struts-Tiles to Spring + tiles 3

我正在从 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

请帮忙,谢谢。

通过 Spring-4 和 Tiles-3 集成设置(有 spring 相关文档以及一些很好的教程)然后将属性放入 spring的模型映射将在您的jsps中可用,这与AttributeContext无关。

AttributeContext only 另一方面(基本上)仅用于保存属性映射。此处的属性在定义中定义,用于标识模板或字符串属性(通常在 xml 定义中声明),并带有角色、渲染器、表达式、and/or 值的属性。

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

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

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

特别是 "Runtime Composition using APIs" 部分。

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

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

否则我建议您深入研究 Tiles 代码库,它不是复杂的代码,尤其是 TilesAccess、Request、ApplicationContext 东西。

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

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

我在项目中使用的是第二种方式。因为 ViewPreparer 的 execute() 方法已经有一个 AttributeContext 类型的参数,每次渲染页面时都会调用这个方法,所以你可以在覆盖时使用这个对象做你想做的事情(或者放在请求中)方法。 AttributeContext 只是 key/value 对的集合。通常,人们使用它来访问模板中的一些属性值,因此获取值并将它们放入请求可以节省开销。您还可以创建继承 class 的一些静态属性并为其设置值。