@Unwrap 的意思有些不清晰

wincheer 2007-12-28
在使用Restful功能的时候,看到了这个注释。它用来注释一个方法,有些不大清楚到底是什么意思。
查阅了一下Seam参考文档,有这么一些解释:

1、@UnWrap注释告诉Seam返回被注释方法的返回值到客户端,而不是组件本身。
2、任何包含@Unwrap方法的组件都是管理器组件。该方法返回客户端可见的值,并且在每次引用上下文变量的时候被调用

<h:dataTable value="#{blog.recentBlogEntries}"......,可是blog组件中根本没有recentBlogEntries这个数据集合,只有一个
@Unwrap
public Blog getBlog()......

哪位先行者来解释一下使用心得?
pf_miles 2008-04-23
假如有如下代码:
@Local
@Stateful(scope=SESSION)
@Name("appConfigAction")
public class AppConfigActionImpl implements Serializable, AppConfigAction {
	private static final long serialVersionUID = 6779263431382170308L;
        @Unwrap
	public Something getAppConfig() {
		return new Something();
	}
}

那么在session环境中被命名为"appConfigAction"的对象将是一个"Something"对象而不是"AppConfigActionImpl"这个组件本身。
这就是所谓的Component Mngr模式,AppConfigActionImpl管理着"Something"这个组件但(while)它自己却对客户端不可见。
yourenyouyu2008 2008-04-28
"#{blog}"得到的是Blog对象,而List<BlogEntry> getRecentBlogEntries()是Blog的方法,所以"#{blog.recentBlogEntries}"得到的就是List<BlogEntry>。
seam获取“blog”时,获取的不是BlogService组件本身,而是被@Unwrap注释的方法的结果。
Mrpublic 2009-02-26
呵呵。LS兩位的解釋讓我對@Unwarp 有一定的認識了,我看書就一直看不懂。。。
hugo 2009-02-26
好像是,Unwrap 每次都要调用,一次初始用factory

Global site tag (gtag.js) - Google Analytics