我从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
请帮助,谢谢。
答案 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只是键/值对的集合。通常,人们使用它来访问模板中属性的某些值,因此获取值并将它们放入请求可以节省开销。您还可以创建继承类的一些静态属性并将值设置为它们。