<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Labs Zsrv Net &#187; Struts2</title>
	<atom:link href="http://labs.zsrv.net/tag/struts2/feed/" rel="self" type="application/rss+xml" />
	<link>http://labs.zsrv.net</link>
	<description>About Gadget, iPhone, Android and so on.</description>
	<lastBuildDate>Fri, 18 Feb 2011 09:34:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>[struts2]struts2とFreemarkerで、テンプレートの実行時エラー表示を抑制する</title>
		<link>http://labs.zsrv.net/2010/03/struts2struts2%e3%81%a8freemarker%e3%81%a7%e3%80%81%e3%83%86%e3%83%b3%e3%83%97%e3%83%ac%e3%83%bc%e3%83%88%e3%81%ae%e5%ae%9f%e8%a1%8c%e6%99%82%e3%82%a8%e3%83%a9%e3%83%bc%e8%a1%a8%e7%a4%ba%e3%82%92/</link>
		<comments>http://labs.zsrv.net/2010/03/struts2struts2%e3%81%a8freemarker%e3%81%a7%e3%80%81%e3%83%86%e3%83%b3%e3%83%97%e3%83%ac%e3%83%bc%e3%83%88%e3%81%ae%e5%ae%9f%e8%a1%8c%e6%99%82%e3%82%a8%e3%83%a9%e3%83%bc%e8%a1%a8%e7%a4%ba%e3%82%92/#comments</comments>
		<pubDate>Fri, 19 Mar 2010 07:27:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Freemarker]]></category>
		<category><![CDATA[Struts2]]></category>

		<guid isPermaLink="false">http://labs.zsrv.net/?p=455</guid>
		<description><![CDATA[struts2でFreemarkerを使っているとそのままでは、テンプレートにエラーが あった場合に、そのまま黄色画面でエラー(StackTrace)が表示されてしまう。 それを出力されないようにするための、FreemarkerManagerを作って設定する。 (これよりもっとスマートな方法はないものか&#8230;) import javax.servlet.ServletContext; import freemarker.template.TemplateException; import freemarker.template.TemplateExceptionHandler; public class FreemarkerManager extends org.apache.struts2.views.freemarker.FreemarkerManager { @Override protected freemarker.template.Configuration createConfiguration(ServletContext servletContext) throws TemplateException { freemarker.template.Configuration configuration = new freemarker.template.Configuration(); configuration.setTemplateLoader(getTemplateLoader(servletContext)); configuration.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); configuration.setObjectWrapper(getObjectWrapper()); if( mruMaxStrongSize > 0 ) { configuration.setSetting(freemarker.template.Configuration.CACHE_STORAGE_KEY, "strong:" + mruMaxStrongSize); } if (encoding != null) { configuration.setDefaultEncoding(encoding); } loadSettings(servletContext, configuration); return configuration; } [...]]]></description>
			<content:encoded><![CDATA[<p>struts2でFreemarkerを使っているとそのままでは、テンプレートにエラーが<br />
あった場合に、そのまま黄色画面でエラー(StackTrace)が表示されてしまう。</p>
<p>それを出力されないようにするための、FreemarkerManagerを作って設定する。<br />
(これよりもっとスマートな方法はないものか&#8230;)</p>
<pre class="brush:java">
import javax.servlet.ServletContext;

import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;

public class FreemarkerManager extends
		org.apache.struts2.views.freemarker.FreemarkerManager {

	@Override
    protected freemarker.template.Configuration createConfiguration(ServletContext servletContext) throws TemplateException {
        freemarker.template.Configuration configuration = new freemarker.template.Configuration();

        configuration.setTemplateLoader(getTemplateLoader(servletContext));

        configuration.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);

        configuration.setObjectWrapper(getObjectWrapper());

        if( mruMaxStrongSize > 0 ) {
            configuration.setSetting(freemarker.template.Configuration.CACHE_STORAGE_KEY, "strong:" + mruMaxStrongSize);
        }

        if (encoding != null) {
            configuration.setDefaultEncoding(encoding);
        }

        loadSettings(servletContext, configuration);

        return configuration;
    }

}
</pre>
<p>struts.xmlに以下を記述。</p>
<pre class="brush:java">
	&lt;!--  freemarker settings --&gt;
	&lt;constant name="struts.freemarker.manager.classname" value="com.bbt757.ktai.freemarker.FreemarkerManager" /&gt;
</pre>
<img src="http://labs.zsrv.net/?ak_action=api_record_view&id=455&type=feed" alt="" /><p><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Flabs.zsrv.net%2F2010%2F03%2Fstruts2struts2%25e3%2581%25a8freemarker%25e3%2581%25a7%25e3%2580%2581%25e3%2583%2586%25e3%2583%25b3%25e3%2583%2597%25e3%2583%25ac%25e3%2583%25bc%25e3%2583%2588%25e3%2581%25ae%25e5%25ae%259f%25e8%25a1%258c%25e6%2599%2582%25e3%2582%25a8%25e3%2583%25a9%25e3%2583%25bc%25e8%25a1%25a8%25e7%25a4%25ba%25e3%2582%2592%2F&amp;linkname=%5Bstruts2%5Dstruts2%E3%81%A8Freemarker%E3%81%A7%E3%80%81%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%81%AE%E5%AE%9F%E8%A1%8C%E6%99%82%E3%82%A8%E3%83%A9%E3%83%BC%E8%A1%A8%E7%A4%BA%E3%82%92%E6%8A%91%E5%88%B6%E3%81%99%E3%82%8B" title="Digg" rel="nofollow" target="_blank"><img src="http://labs.zsrv.net/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a class="a2a_button_google_bookmarks" href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Flabs.zsrv.net%2F2010%2F03%2Fstruts2struts2%25e3%2581%25a8freemarker%25e3%2581%25a7%25e3%2580%2581%25e3%2583%2586%25e3%2583%25b3%25e3%2583%2597%25e3%2583%25ac%25e3%2583%25bc%25e3%2583%2588%25e3%2581%25ae%25e5%25ae%259f%25e8%25a1%258c%25e6%2599%2582%25e3%2582%25a8%25e3%2583%25a9%25e3%2583%25bc%25e8%25a1%25a8%25e7%25a4%25ba%25e3%2582%2592%2F&amp;linkname=%5Bstruts2%5Dstruts2%E3%81%A8Freemarker%E3%81%A7%E3%80%81%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%81%AE%E5%AE%9F%E8%A1%8C%E6%99%82%E3%82%A8%E3%83%A9%E3%83%BC%E8%A1%A8%E7%A4%BA%E3%82%92%E6%8A%91%E5%88%B6%E3%81%99%E3%82%8B" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://labs.zsrv.net/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Flabs.zsrv.net%2F2010%2F03%2Fstruts2struts2%25e3%2581%25a8freemarker%25e3%2581%25a7%25e3%2580%2581%25e3%2583%2586%25e3%2583%25b3%25e3%2583%2597%25e3%2583%25ac%25e3%2583%25bc%25e3%2583%2588%25e3%2581%25ae%25e5%25ae%259f%25e8%25a1%258c%25e6%2599%2582%25e3%2582%25a8%25e3%2583%25a9%25e3%2583%25bc%25e8%25a1%25a8%25e7%25a4%25ba%25e3%2582%2592%2F&amp;linkname=%5Bstruts2%5Dstruts2%E3%81%A8Freemarker%E3%81%A7%E3%80%81%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%81%AE%E5%AE%9F%E8%A1%8C%E6%99%82%E3%82%A8%E3%83%A9%E3%83%BC%E8%A1%A8%E7%A4%BA%E3%82%92%E6%8A%91%E5%88%B6%E3%81%99%E3%82%8B" title="Google Reader" rel="nofollow" target="_blank"><img src="http://labs.zsrv.net/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Flabs.zsrv.net%2F2010%2F03%2Fstruts2struts2%25e3%2581%25a8freemarker%25e3%2581%25a7%25e3%2580%2581%25e3%2583%2586%25e3%2583%25b3%25e3%2583%2597%25e3%2583%25ac%25e3%2583%25bc%25e3%2583%2588%25e3%2581%25ae%25e5%25ae%259f%25e8%25a1%258c%25e6%2599%2582%25e3%2582%25a8%25e3%2583%25a9%25e3%2583%25bc%25e8%25a1%25a8%25e7%25a4%25ba%25e3%2582%2592%2F&amp;linkname=%5Bstruts2%5Dstruts2%E3%81%A8Freemarker%E3%81%A7%E3%80%81%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%81%AE%E5%AE%9F%E8%A1%8C%E6%99%82%E3%82%A8%E3%83%A9%E3%83%BC%E8%A1%A8%E7%A4%BA%E3%82%92%E6%8A%91%E5%88%B6%E3%81%99%E3%82%8B" title="Facebook" rel="nofollow" target="_blank"><img src="http://labs.zsrv.net/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Flabs.zsrv.net%2F2010%2F03%2Fstruts2struts2%25e3%2581%25a8freemarker%25e3%2581%25a7%25e3%2580%2581%25e3%2583%2586%25e3%2583%25b3%25e3%2583%2597%25e3%2583%25ac%25e3%2583%25bc%25e3%2583%2588%25e3%2581%25ae%25e5%25ae%259f%25e8%25a1%258c%25e6%2599%2582%25e3%2582%25a8%25e3%2583%25a9%25e3%2583%25bc%25e8%25a1%25a8%25e7%25a4%25ba%25e3%2582%2592%2F&amp;linkname=%5Bstruts2%5Dstruts2%E3%81%A8Freemarker%E3%81%A7%E3%80%81%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%81%AE%E5%AE%9F%E8%A1%8C%E6%99%82%E3%82%A8%E3%83%A9%E3%83%BC%E8%A1%A8%E7%A4%BA%E3%82%92%E6%8A%91%E5%88%B6%E3%81%99%E3%82%8B" title="Delicious" rel="nofollow" target="_blank"><img src="http://labs.zsrv.net/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a class="a2a_button_friendfeed" href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Flabs.zsrv.net%2F2010%2F03%2Fstruts2struts2%25e3%2581%25a8freemarker%25e3%2581%25a7%25e3%2580%2581%25e3%2583%2586%25e3%2583%25b3%25e3%2583%2597%25e3%2583%25ac%25e3%2583%25bc%25e3%2583%2588%25e3%2581%25ae%25e5%25ae%259f%25e8%25a1%258c%25e6%2599%2582%25e3%2582%25a8%25e3%2583%25a9%25e3%2583%25bc%25e8%25a1%25a8%25e7%25a4%25ba%25e3%2582%2592%2F&amp;linkname=%5Bstruts2%5Dstruts2%E3%81%A8Freemarker%E3%81%A7%E3%80%81%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%81%AE%E5%AE%9F%E8%A1%8C%E6%99%82%E3%82%A8%E3%83%A9%E3%83%BC%E8%A1%A8%E7%A4%BA%E3%82%92%E6%8A%91%E5%88%B6%E3%81%99%E3%82%8B" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://labs.zsrv.net/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a class="a2a_button_evernote" href="http://www.addtoany.com/add_to/evernote?linkurl=http%3A%2F%2Flabs.zsrv.net%2F2010%2F03%2Fstruts2struts2%25e3%2581%25a8freemarker%25e3%2581%25a7%25e3%2580%2581%25e3%2583%2586%25e3%2583%25b3%25e3%2583%2597%25e3%2583%25ac%25e3%2583%25bc%25e3%2583%2588%25e3%2581%25ae%25e5%25ae%259f%25e8%25a1%258c%25e6%2599%2582%25e3%2582%25a8%25e3%2583%25a9%25e3%2583%25bc%25e8%25a1%25a8%25e7%25a4%25ba%25e3%2582%2592%2F&amp;linkname=%5Bstruts2%5Dstruts2%E3%81%A8Freemarker%E3%81%A7%E3%80%81%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%81%AE%E5%AE%9F%E8%A1%8C%E6%99%82%E3%82%A8%E3%83%A9%E3%83%BC%E8%A1%A8%E7%A4%BA%E3%82%92%E6%8A%91%E5%88%B6%E3%81%99%E3%82%8B" title="Evernote" rel="nofollow" target="_blank"><img src="http://labs.zsrv.net/wp-content/plugins/add-to-any/icons/evernote.png" width="16" height="16" alt="Evernote"/></a> <a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Flabs.zsrv.net%2F2010%2F03%2Fstruts2struts2%25e3%2581%25a8freemarker%25e3%2581%25a7%25e3%2580%2581%25e3%2583%2586%25e3%2583%25b3%25e3%2583%2597%25e3%2583%25ac%25e3%2583%25bc%25e3%2583%2588%25e3%2581%25ae%25e5%25ae%259f%25e8%25a1%258c%25e6%2599%2582%25e3%2582%25a8%25e3%2583%25a9%25e3%2583%25bc%25e8%25a1%25a8%25e7%25a4%25ba%25e3%2582%2592%2F&amp;linkname=%5Bstruts2%5Dstruts2%E3%81%A8Freemarker%E3%81%A7%E3%80%81%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%81%AE%E5%AE%9F%E8%A1%8C%E6%99%82%E3%82%A8%E3%83%A9%E3%83%BC%E8%A1%A8%E7%A4%BA%E3%82%92%E6%8A%91%E5%88%B6%E3%81%99%E3%82%8B" title="Twitter" rel="nofollow" target="_blank"><img src="http://labs.zsrv.net/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://labs.zsrv.net/wp-content/plugins/add-to-any/favicon.png" width="16" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://labs.zsrv.net/2010/03/struts2struts2%e3%81%a8freemarker%e3%81%a7%e3%80%81%e3%83%86%e3%83%b3%e3%83%97%e3%83%ac%e3%83%bc%e3%83%88%e3%81%ae%e5%ae%9f%e8%a1%8c%e6%99%82%e3%82%a8%e3%83%a9%e3%83%bc%e8%a1%a8%e7%a4%ba%e3%82%92/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Java]FreemarkerのテンプレートでPaging(ページング)処理を行う</title>
		<link>http://labs.zsrv.net/2010/02/javafreemarker%e3%81%ae%e3%83%86%e3%83%b3%e3%83%97%e3%83%ac%e3%83%bc%e3%83%88%e3%81%a7paging%e3%83%9a%e3%83%bc%e3%82%b8%e3%83%b3%e3%82%b0%e5%87%a6%e7%90%86%e3%82%92%e8%a1%8c%e3%81%86/</link>
		<comments>http://labs.zsrv.net/2010/02/javafreemarker%e3%81%ae%e3%83%86%e3%83%b3%e3%83%97%e3%83%ac%e3%83%bc%e3%83%88%e3%81%a7paging%e3%83%9a%e3%83%bc%e3%82%b8%e3%83%b3%e3%82%b0%e5%87%a6%e7%90%86%e3%82%92%e8%a1%8c%e3%81%86/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 06:51:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Freemarker]]></category>
		<category><![CDATA[Struts2]]></category>

		<guid isPermaLink="false">http://labs.zsrv.net/?p=430</guid>
		<description><![CDATA[以下のようなFunctionを作った。 引数に、リスト、ページあたりに表示する行数、現在ページ数。 &#60;#function paginator list num page&#62; &#60;#assign has_pre = false&#62; &#60;#assign has_next = false&#62; &#60;#if list?size == 0&#62; &#60;#return list&#62; &#60;/#if&#62; &#60;#local start = (page - 1) * num&#62; &#60;#local end = start + num - 1&#62; &#60;#if page gt 1&#62; &#60;#assign has_pre = true&#62; &#60;/#if&#62; &#60;#if end gte list?size - 1&#62; &#60;#local end [...]]]></description>
			<content:encoded><![CDATA[<p>以下のようなFunctionを作った。<br />
引数に、リスト、ページあたりに表示する行数、現在ページ数。</p>
<pre class="brush:html">
&lt;#function paginator list num page&gt;
	&lt;#assign has_pre = false&gt;
	&lt;#assign has_next = false&gt;
	&lt;#if list?size == 0&gt;
		&lt;#return list&gt;
	&lt;/#if&gt;
	&lt;#local start = (page - 1) * num&gt;
	&lt;#local end = start + num - 1&gt;
	&lt;#if page gt 1&gt;
		&lt;#assign has_pre = true&gt;
	&lt;/#if&gt;
	&lt;#if end gte list?size - 1&gt;
		&lt;#local end = list?size - 1&gt;
		&lt;#assign has_next = false&gt;
	&lt;#else&gt;
		&lt;#assign has_next = true&gt;
	&lt;/#if&gt;
	&lt;#return list[start..end]&gt;
&lt;/#function&gt;
</pre>
</p>
<p>使い方的には以下のようになる。</p>
<pre class="brush:html">
&lt;#list paginator(["a", "b", "c", "d", "e"], 2, page) as item&gt;
	${item}&lt;br /&gt;
&lt;/#list&gt;
&lt;#if has_pre&gt;&lt;a href="?page=${page - 1}"&gt;pre&lt;/a&gt;&lt;/#if&gt;
&lt;#if has_next&gt;&lt;a href="?page=${page + 1}"&gt;next&lt;/a&gt;&lt;/#if&gt;
</pre></p>
<img src="http://labs.zsrv.net/?ak_action=api_record_view&id=430&type=feed" alt="" /><p><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Flabs.zsrv.net%2F2010%2F02%2Fjavafreemarker%25e3%2581%25ae%25e3%2583%2586%25e3%2583%25b3%25e3%2583%2597%25e3%2583%25ac%25e3%2583%25bc%25e3%2583%2588%25e3%2581%25a7paging%25e3%2583%259a%25e3%2583%25bc%25e3%2582%25b8%25e3%2583%25b3%25e3%2582%25b0%25e5%2587%25a6%25e7%2590%2586%25e3%2582%2592%25e8%25a1%258c%25e3%2581%2586%2F&amp;linkname=%5BJava%5DFreemarker%E3%81%AE%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%81%A7Paging%28%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%B3%E3%82%B0%29%E5%87%A6%E7%90%86%E3%82%92%E8%A1%8C%E3%81%86" title="Digg" rel="nofollow" target="_blank"><img src="http://labs.zsrv.net/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a class="a2a_button_google_bookmarks" href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Flabs.zsrv.net%2F2010%2F02%2Fjavafreemarker%25e3%2581%25ae%25e3%2583%2586%25e3%2583%25b3%25e3%2583%2597%25e3%2583%25ac%25e3%2583%25bc%25e3%2583%2588%25e3%2581%25a7paging%25e3%2583%259a%25e3%2583%25bc%25e3%2582%25b8%25e3%25
