我从一个SpringMVC + Tiles项目迁移到Strut1和Apache 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
帮帮忙,谢谢。
发布于 2015-03-03 17:01:35
Bidi,有两种获取AttributeContext的方法:
第一个,如mck所说:通过"org.apache.tiles.AttributeContext.STACK“键的请求范围。但是,该值是一个包含2个AttributeContext类型元素的堆栈。我们需要的是第一个要素。IMHO,这种方式是有限的,因为数据结构是一个堆栈,因此也意味着根据FIFO规则从堆栈中移除,所以您只能使用对象一次。
我在我的项目中使用了第二种方式。因为ViewPreparer的execute()方法已经有一个AttributeContext类型的参数,而且每次呈现页面时都会调用该方法,所以在重写该方法时,您可以使用该对象来完成您想做的事情(或将其放在请求中)。AttributeContext只是键/值对的集合。通常,人们使用它来访问一些值,这些值是模板中的属性,因此获取值并将它们放到请求中可以节省开销。还可以创建继承类的一些静态属性,并将值设置为它们。
发布于 2015-01-11 11:08:17
随着Spring-4和Tiles-3集成的建立(这里有spring文档,以及一些很好的教程),那么您放入spring模型映射中的属性将在您的jsp中可用,这与AttributeContext无关。
AttributeContext只是另一方面,(基本上)只用于保存属性映射。这里的属性在定义中定义,用于标识模板或字符串属性(通常在xml定义中声明),并附带角色、呈现器、表达式和/或值的属性。
如果AttributeContext是您所追求的:您可以通过当前的tilesContainer获取它,并使用静态TilesAccess获取当前容器,例如
TilesContainer tileContainer = TilesAccess.getCurrentContainer(request);
AttributeContext attributeContext = tilesContainer.getAttributeContext(request);发布于 2015-01-17 18:49:50
比迪,读一读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之类的代码。
https://stackoverflow.com/questions/27845286
复制相似问题