Syboos jsf4jstl forEach tokenizer 実装例2
2008/11/20 12:00Update
JSPでデータを表示する際に、そのままのデータだと、思い通りの表示にならない場合があります。このような場合、表示にあわせてJavaBeanを修正することが当たり前ですが、forEach tokenizer機能を利用すれば、JavaBeanを修正しなくても済みます。
forEach tokenizer機能は、データを表示する前に、指定されるトークンクラスのオブジェクトを自動的に生成し、データの変換をかけることができます。
■JSP例:
■Beanクラス実装例:
■トークンクラス実装例
以上。
■JSP例:
<%@ taglib uri="http://tfaces.syboos.com/tag/core" prefix="tc" %>
<tc:forEach items="#{myBean.list}" var="item" tokenizer="com.syboos.tokenizer.List2PairListTokenizer">
<h:outputText value="左:#{item.left.name}"></h:outputText>
<f:verbatim>--</f:verbatim>
<h:outputText value="右:#{item.right.name}"></h:outputText>
<f:verbatim><hr></f:verbatim>
</tc:forEach>
■Beanクラス実装例:
//MyBean.java
public class MyBean {
private List <Book> list;
public List<Book> getList() {
if (list != null) return list;
list = new ArrayList<Book>();
Book book01 = new Book("Book01");
list.add(book01);
Book book02 = new Book("Book02");
list.add(book02);
Book book03 = new Book("Book03");
list.add(book03);
//...
}
public void setList(List<Book> list) {
this.list = list;
}
}
//Book.java
public class Book {
private String name;
public Book(String name) {
this.name = name;
}
//setter/getter TODO
//...
}
■トークンクラス実装例
//List2PairListTokenizer
package com.syboos.tokenizer;
import java.util.ArrayList;
import java.util.List;
import com.syboos.faces.component.core.IForEachTokenizer;
public class List2PairListTokenizer implements IForEachTokenizer {
public List2PairListTokenizer() {
super();
}
// List<Object> から List <Pair>に変換
//例:
//value = {"1", "2", "3", "4", "5"} List型の場合
//戻り値 = { ⇒List型
// {left: "1", right: "2"}, ⇒Pair型
// {left: "3", right: "4"}, ⇒Pair型
// {left: "5", right: null} ⇒Pair型
// } List型の形になります。
@SuppressWarnings("unchecked")
public Object tokenize(Object value) {
if (value == null || value.equals("")
|| !(value instanceof List)) {
return value;
}
List <Pair>ret = new ArrayList<Pair>();
int i=0;
for (Object obj : (List)value) {
Pair pair = null;
if (ret.size() <= i/2) {
pair = new Pair();
ret.add(pair);
} else {
pair = ret.get(i/2);
}
if (i%2 == 0) {
pair.setLeft(obj);
} else {
pair.setRight(obj);
}
i++;
}
return ret;
}
public class Pair {
private Object left;
private Object right;
public Pair () {
}
public Pair (Object left, Object right) {
this.left = left;
this.right = right;
}
public Object getLeft() {
return left;
}
public void setLeft(Object left) {
this.left = left;
}
public Object getRight() {
return right;
}
public void setRight(Object right) {
this.right = right;
}
}
@SuppressWarnings("unchecked")
public static void main(String []args) {
List2PairListTokenizer x = new List2PairListTokenizer();
List <String>list = new ArrayList<String>();
list.add("0");
list.add("1");
list.add("2");
list.add("3");
list.add("4");
List <Pair> retList = (List<Pair>)x.tokenize(list);
int i = 0;
for (Pair pair:retList) {
System.out.println((i++) + ": left=" + pair.getLeft() + " right=" + pair.getRight());
}
}
}
以上。
Sponsored Link
- Relative Articles
- Syboos jsf4jstl License - GNU LGPL - (2008/01/20 22:55)
- Syboos jsf4jstl とは? - (2008/01/20 23:03)
- Syboos jsf4jstl タグの使い方 (JSFでJSTLのコアタグ) - (2008/01/20 23:29)
- Syboos jsf4jstl Download - (2008/01/21 00:09)
- Syboos jsf4jstl quick start - (2008/02/24 19:27)
- Syboos jsf4jstl 1.20がリリースされました! - (2008/02/24 20:35)
- Syboos jsf4jstl forEach tokenizer - (2008/02/24 21:38)