[Seasar-user:18127] Re: [Teeda]forEachでListのDtoにコンポジションしているBeanの中身を出力したい
Takanori Asahara
[E-MAIL ADDRESS DELETED]
2009年 7月 30日 (木) 16:43:48 JST
小林さま
お世話になっております。浅原孝経です。
本件、小林さまにご教示いただいた方法の独自コンバータ案で対応し、
無事に動作いたしました。
# HTMLにJSFを記述するよりきれいだと思いまして。
本当にありがとうございました。
ソースコードの方、以下に開示しておきます。
【CodeValueConverter.java】<新規追加>
package foo.annotation.convert;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.seasar.teeda.extension.annotation.convert.Converter;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD})
@Converter("codeValueConverter")
public @interface CodeValueConverter {
String objectMessageId() default "";
String stringMessageId() default "";
String target() default "";
}
【CodeValueConverter.java】<新規追加>
package foo.convert;
import javax.faces.component.StateHolder;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import bar.bean.CodeValue;
import org.apache.commons.lang.StringUtils;
import org.seasar.framework.util.AssertionUtil;
import org.seasar.framework.util.StringUtil;
public class CodeValueConverter implements Converter, StateHolder {
protected String objectMessageId;
protected String stringMessageId;
protected boolean transientValue;
protected String target;
protected String targets[];
public static final String CONVERSION_OBJECT_ID;
public static final String CONVERSION_STRING_ID;
static {
CONVERSION_OBJECT_ID = (CodeValueConverter.class).getName() + ".CONVERSION";
CONVERSION_STRING_ID = (CodeValueConverter.class).getName() + ".CONVERSION_STRING";
}
public CodeValueConverter() {
super();
transientValue = false;
}
@Deprecated
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) throws ConverterException {
return null;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) throws ConverterException {
AssertionUtil.assertNotNull("FacesContext", context);
AssertionUtil.assertNotNull("UIComponent", component);
if (value == null) {
return null;
}
final CodeValue codeValue = (CodeValue) value;
return (StringUtils.isEmpty(codeValue.getValue())) ? StringUtils.EMPTY : codeValue.getValue();
}
@Override
public Object saveState(FacesContext context) {
final Object values[] = new Object[3];
values[0] = objectMessageId;
values[1] = stringMessageId;
values[2] = target;
return ((Object) (values));
}
@Override
public void restoreState(FacesContext context, Object state) {
final Object values[] = (Object[]) state;
objectMessageId = (String) values[0];
stringMessageId = (String) values[1];
target = (String) values[2];
this.setTarget(target);
}
public String getObjectMessageId() {
return StringUtil.isEmpty(this.objectMessageId) ? CONVERSION_OBJECT_ID : this.objectMessageId;
}
public void setObjectMessageId(String objectMessageId) {
this.objectMessageId = objectMessageId;
}
public String getStringMessageId() {
return StringUtil.isEmpty(this.stringMessageId) ? CONVERSION_STRING_ID : this.stringMessageId;
}
public void setStringMessageId(String stringMessageId) {
this.stringMessageId = stringMessageId;
}
public String getTarget() {
return this.target;
}
public void setTarget(String target) {
this.target = target;
if (StringUtil.isEmpty(target)) {
return;
} else {
targets = StringUtil.split(target, ", ");
return;
}
}
@Override
public void setTransient(boolean transientValue) {
this.transientValue = transientValue;
}
@Override
public boolean isTransient() {
return this.transientValue;
}
}
【SyainDto.java】
package bar.dto;
import bar.bean.CodeValue;
import java.io.Serializable;
public class SyainDto implements Serializable {
private static final long serialVersionUID = 1L;
// 名前
private String name;
// 性別
private CodeValue sex;
// 出身国
private CodeValue country;
}
【CodeValue.java】
package bar.bean;
import java.io.Serializable;
public class CodeValue implements Serializable {
private static final long serialVersionUID = 1L;
// コード
private String code;
// 値
private String value;
}
【SyainSearchPage.java】
package foo.web.syain;
import java.util.Arrays;
import java.util.List;
import bar.service.SyainService;
import org.seasar.framework.container.annotation.tiger.Binding;
import org.seasar.framework.container.annotation.tiger.BindingType;
public class SyainSearchPage {
// SOAPにて社員関連の操作を提供するサービス
@Binding(bindingType = BindingType.MUST)
private SyainService syainService;
// 社員DtoのList
private List<SyainDto> syainDtoItems;
// 社員Dto
private SyainDto syainDto;
// 名前
private String name;
// 性別
@CodeValueConverter
private CodeValue sex;
// 出身国
@CodeValueConverter
private CodeValue country;
public void prerender() {
// SOAPで社員Dtoの配列(SyainDto[])を取得してjava.util.Listに変換
syainDtoItems = Arrays.asList(syainService.getSyainArray());
}
}
【syainSearch.html】
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:te="http://www.seasar.org/teeda/extension" xml:lang="ja"
lang="ja">
<head>
<title id="syainSearchTitle"></title>
</head>
<body>
<table>
<tbody id="syainDtoItems">
<tr>
<td><span id="name"/></td>
<td><span id="sex"/></td>
<td><span id="country"/></td>
</tr>
</tbody>
</table>
</body>
</html>
Seasar-user メーリングリストの案内