1

GenericService.resolveName(java.lang.String pName) 当我尝试对会话范围使用类似 错误时,我收到了上述错误 。如果我将范围更改为“全局”,则一切正常。但我需要让我的组件在原型范围内。那我能做什么..?

4

2 回答 2

1

请验证您的要求以确保您确实必须使用原型范围。

由于我们不知道您的要求,我们无法验证您想要实现的是否是一个好的实践,但我的 2 美分来克服您的技术问题是从请求级别开始解决该组件。

如果您有权访问当前请求,请执行以下操作:

request.resolveName(componentName);

否则,请执行以下操作:

ServletUtil.getCurrentRequest().resolveName(componentName);

resolveName 是一个计算量很大的操作,所以它应该只在你没有任何其他选项时使用(例如在请求 servlet 管道中,引用请求或会话组件),但如果你必须这样做,它会解决你的问题。

于 2013-09-17T09:49:34.203 回答
0

您可能无法从更高范围的对象解析更低范围的组件。

如果您从全局范围内调用 resolveComponent,组件可能无法解析它。

组件的属性应始终指向其范围等于或大于其自身的对象。因此,全局范围的组件属性应该只指向也具有全局范围的对象;session-scope 组件属性应该只指向具有全局或会话范围的对象;而请求范围组件属性可以指向任何范围的对象,包括请求。

请阅读下面的 ATG 文档

http://docs.oracle.com/cd/E35318_02/Platform.10-1-1/ATGPlatformProgGuide/html/s0205componentscopes01.html

于 2013-08-31T20:30:19.683 回答