`
q_wong
  • 浏览: 105248 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Seam中使用selectItems and @Factory的三种方法

    博客分类:
  • Seam
阅读更多
http://www.blogjava.net/sealyu/archive/2009/03/10/258904.html
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).

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics