Struts 2ベースのFreemarkerマクロによるデータとページの分離
2410 ワード
Struts 2とFreemarkerを用いた開発では,Freemarkerのマクロ(macro)を用いてデータとページの分離効果を達成し,ページ開発者とバックグラウンドビジネス開発者を分離し,ビジネスコードの再利用性を向上させることができる.
主な考え方は以下の通りです.
まずはStruts 2コード
TagActionを要求してexecuteResultをfalseとして指定し、ページを返さずrequestからのみデータを取得します.
次に、マクロを具体的に呼び出すページを示します.MMSはFreemarkerのネーミングスペースです.
MMS.Test_tagマクロの宣言は、以下のように最適化することもできる.
主な考え方は以下の通りです.
まずはStruts 2コード
package com.test.mms.article.web.tag;
import org.apache.struts2.ServletActionContext;
import org.springframework.context.annotation.Scope;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
@Scope("prototype")
public class TagAction extends ActionSupport {
public String execute() {
String[] names = { "Lucy", "Lily", "Gordon" };
ServletActionContext.getRequest().setAttribute("names", names);
return SUCCESS;
}
}
続いてFreemarkerのマクロ宣言で、struts2-convention-pluginが使用されているため、プロファイル指定ジャンプ関係は必要ありません.<#macro Test_tag >
<@s.action name="tag" namespace="/article/web/tag" executeResult="false">
</@s.action>
<#nested names>
</#macro>
TagActionを要求してexecuteResultをfalseとして指定し、ページを返さずrequestからのみデータを取得します.
次に、マクロを具体的に呼び出すページを示します.MMSはFreemarkerのネーミングスペースです.
<@MMS.Test_tag >
<#if names??>
<ul>
<#list names as name>
<li>
${name}
</li>
</#list>
</ul>
<#else>
</#if>
</@MMS.Test_tag>
MMS.Test_tagマクロの宣言は、以下のように最適化することもできる.
<#macro Test_tag inner="1">
<@s.action name="tag" namespace="/article/web/tag" executeResult="false">
</@s.action>
<#nested names,ages,educations>
<#if inner="0">
<#if names??>
<#list names as name>
<span>${name}</span>
</#list>
</#if>
</#if>
</#macro>
簡単な説明では、マクロに新しいパラメータinnerのデフォルト値は1であり、innerが0の場合、namesにデフォルトのスタイルが提供され、ages、educationsは他の2つのデータのセットにデフォルトのスタイルが提供されません.