Sealyu

--- 博客已迁移至: http://www.sealyu.com/blog

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  618 随笔 :: 87 文章 :: 225 评论 :: 0 Trackbacks
here are 3 possible examples how to initialize component:

1. Using @Unwrap with method returning object - method doesn't have to be getter:

@Name("search")
public class SearchAction {
// can't be used with @Out
@Unwrap
public Map<String,Integer> initList() {
System.out.println("In-method initList");
Map<String,Integer> list = new TreeMap<String,Integer>();
list.put("one", 1);
list.put("two", 2);
list.put("three", 3);
return list;
}
}

to use this component on the page you need to call it search:

<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich"
template="layout/template.xhtml">
<ui:define name="body">
<h:form id="search" styleClass="edit">
<h:selectOneMenu>
<s:selectItems
value="#{search}"/>
</h:selectOneMenu>
</h:form>
</ui:define>
</ui:composition>

2. Using @Factory with method returning void - method doesn't have to be getter and @Out must be used to outject object to page:

@Name("search")
public class SearchAction {
// use with @Out because creation method is returning void
@Out
private Map<String,Integer> list;
@Factory("list")
public void initList() {
System.out.println("In-method initList");
list = new TreeMap<String,Integer>();
list.put("one", 1);
list.put("two", 2);
list.put("three", 3);
list.put("six", 6);
}
}

to use this component on the page you need to call it list:

<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich"
template="layout/template.xhtml">
<ui:define name="body">
<h:form id="search" styleClass="edit">
<h:selectOneMenu>
<s:selectItems
value="#{list}"/>
</h:selectOneMenu>
</h:form>
</ui:define>
</ui:composition>

3. Using @Factory with method returning object - method mut be getter, @Out is not needed

@Name("search")
public class SearchAction {
// without @Out annotation
@Factory("list")
public Map<String,Integer> getList() {
System.out.println("In-method initList");
Map<String,Integer> list = new TreeMap<String,Integer>();
list.put("one", 1);
list.put("two", 2);
list.put("three", 3);
return list;
}
}

component usage is like in example (2.)

Additionally class used in all these examples doesn't have to be EJB bean - they only have to be Seam component (marked by @Name annotation).

Each of these method is different - details can be found in http://chiralsoftware.com/jboss-seam-book/unwrap.seam as previously mentioned Thiago Rocha (thanks).

posted on 2009-03-10 19:57 seal 阅读(506) 评论(0)  编辑  收藏 所属分类: Seam

只有注册用户登录后才能发表评论。


网站导航: