これの続き。
freemarker.template.ConfigurationのWrapperクラスを作って
Pageクラスを全部メソッドチェイン形式で書いてみる。
freemarker.template.ConfigurationのWrapperクラス
package test.navigation;import java.io.IOException;
import java.util.Locale;import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.ObjectWrapper;public class WrappedConfiguration extends Configuration {
public FTLNavigation getFTLNavigation(String name) throws IOException {
return FTLNavigation.getNavigation(super.getTemplate(name));
}public FTLNavigation getFTLNavigation(String name, String encoding) throws IOException {
return FTLNavigation.getNavigation(super.getTemplate(name, encoding));
}
public FTLNavigation getFTLNavigation(String name, Locale locale) throws IOException {
return FTLNavigation.getNavigation(super.getTemplate(name, locale));
}
public FTLNavigation getFTLNavigation(String name, Locale locale, String encoding)
throws IOException {
return FTLNavigation.getNavigation(super.getTemplate(name, locale, encoding));
}public FTLNavigation getFTLNavigation(String name, Locale locale, String encoding,
boolean parse) throws IOException {
return FTLNavigation.getNavigation(super.getTemplate(name, locale, encoding, parse));
}public WrappedConfiguration setObjectWrapperEX(ObjectWrapper objectWrapper){
super.setObjectWrapper(objectWrapper);
return this;
}
public WrappedConfiguration setDefaultObjectWrapperEX(){
super.setObjectWrapper(new DefaultObjectWrapper());
return this;
}
// 他、必要に応じてWrapしたメソッドを追加していく
}
Pageクラス
package test.page;
import org.t2framework.commons.annotation.composite.RequestScope;
import org.t2framework.commons.util.Logger;
import org.t2framework.t2.annotation.core.Default;
import org.t2framework.t2.annotation.core.Page;
import org.t2framework.t2.annotation.core.RequestParam;
import org.t2framework.t2.spi.Navigation;import test.navigation.WrappedConfiguration;
@Page("/view")
@RequestScope
public class ViewPage {
@SuppressWarnings("unused")
private static Logger logger = Logger.getLogger(ViewPage.class);@Default
public Navigation view(@RequestParam("p") String p) throws Exception{return new WrappedConfiguration()
.setDefaultObjectWrapperEX()
.getFTLNavigation("WEB-INF/html/view.html", "utf-8")
.put("message", p);
}
}
中身が一行で書けて、パット見すっきりするけど
戻り値がなんだかわからなくなってくるのでメソッドチェインはほどほどに。