Velocity用Eclipse plugin・Veloeclipseの導入とStruts2対応
Velocity用Eclipse plugin
VelocityのtemplateをEclipseで編集したいので探してみた。
↓を入れるだけ
de.veloeclipse.update
ユーザー・ディレクティブ対応
VeloeclipseはHTMLタグやディレクティブの入力補完に対応し、
ブロック・ディレクティブの閉じ漏れをエラーとして表示してくれる。
しかし、当然知らないディレクティブには対応していない。
このままではユーザー・ディレクティブの入力補完は効かないし、
ブロック・ディレクティブであるユーザー・ディレクティブが記述されていると
それだけでエラー表示されてしまう。
なので、使用するユーザー・ディレクティブについて教えてやらないといけない。
ウィンドウ>設定>Veloeclipseにユーザー・ディレクティブのリスト
という項目があるのでここから新規に追加していけばよい。
数が多いと手動で設定していくのが大変面倒くさくなるし、
各開発者が同じ設定を個別にやるのは大変アホくさい。
workspace/.metadata/.plugins/org.eclipse.core.runtime/.settings/de.byteaction.velocity.ui.prefs
↑の設定ファイルの↓の項目に設定すればよい。
de.byteaction.velocity.vaulttec.ui.velocity.userDirectives=
書き方は各ディレクティブの、「ディレクティブ名 [タイプ]」をカンマ区切りで、末尾に余計なカンマがあるのは問題ない。
↓のようになる。
sfile [Line],sform [Block]
Struts2対応
Struts2のカスタムタグはVelocityではユーザー・ディレクティブとして実現されている。
これらを全部登録してやらないとStruts2+Velocity開発でVeloeclipseは使い物にならない。
Struts2 JUnit PluginのStrutsTestCaseでは、
実際にアプリを動かす時と同じ形でstruts.xmlの設定を持ってこれる
(com.opensymphony.xwork2.XWorkTestCase.container)ので、これを使う。
Struts2+Velocityで使えるユーザディレクティブの設定は、
org.apache.struts2.views.velocity.VelocityManagerにて、
各TagLibrary実装classとstruts.xmlの設定から行われるのでコードを参考にする。
import java.util.ArrayList; import java.util.List; import java.util.Set; import org.apache.struts2.StrutsTestCase; import org.apache.struts2.views.TagLibrary; import org.apache.velocity.runtime.directive.Directive; import org.apache.velocity.runtime.directive.DirectiveConstants; public class ExportUserDirectiveTest extends StrutsTestCase { public void test() throws Exception { List<TagLibrary> list = new ArrayList<TagLibrary>(); Set<String> prefixes = container.getInstanceNames(TagLibrary.class); for (String prefix : prefixes) { list.add(container.getInstance(TagLibrary.class, prefix)); } StringBuilder sb = new StringBuilder("de.byteaction.velocity.vaulttec.ui.velocity.userDirectives="); for(TagLibrary taglib : list){ for(Class clazz : taglib.getVelocityDirectiveClasses()){ Directive directive = (Directive)clazz.newInstance(); sb.append(directive.getName()); sb.append(" ["); sb.append(directive.getType() == DirectiveConstants.BLOCK ? "Block" : "Line"); sb.append("],"); } } System.out.println(sb.toString()); } }
これを流せば、Struts2+Velocityでのカスタムタグ拡張の初歩 - 文殊堂の方法で定義したものも含めて、
ユーザー・ディレクティブのVeloeclipse用設定が手に入るので、
Eclipseを落として貼り付けて起動すればおk。