2016-10-07 5 views
1

私はftlをレンダリングし、文字列変数で出力を取得するJavaプログラムを作成しました。 以下の私のコード見つけてください:私はSRCに私の応答ファイルを配置し、パッケージの私のjavaファイルいるftlテンプレートを取得しようとしたときにファイルが見つかりません

Configuration cfg = new Configuration(); 
StringWriter stringWriter = new StringWriter(); 
try 
{ 
     Template template = cfg.getTemplate("src/response.get.html.ftl"); 
     model.put("content",contextModel); 
     template.process(model, stringWriter); 
     System.out.println(stringWriter); 

} 

をしかしTemplate template = cfg.getTemplate("src/response.get.html.ftl");

にファイルが見つからない例外を取得していますcom.test .webscriptshttp://viralpatel.net/blogs/freemaker-template-hello-world-tutorial/によると、その罰金。しかし、私はなぜ例外が発生しているのか理解できません。誰か助けてくれますか?

ありがとうございます!

答えて

1

は、一般的にsrcは、ランタイムにアクセスできません。ビルドが完了したら、IDE内でIDEがまだ存在する場合でも(アプリケーションをデプロイするときとは異なり)、アプリケーションはビルドの出力(「バイナリ」)のみに依存する必要があります。

また、TemplateLoaderを使用していることを示していません。

cfg.setClassForTemplateLoading(SomeClassInMyApp.class, "/"); 

、その後:

cfg.getTemplate("response.get.html.ftl"); 

それは、サブディレクトリを作成するのがcom/mycompany/myapp/templatesを言わせて、そこにテンプレートを置くためのより安全な練習だあなたは、おそらくこのような何かを行う必要があります。そこには、テンプレートディレクトリに、比較的パスを指定し、cfg.getTemplate("response.get.html.ftl"は変わらない

cfg.setClassForTemplateLoading(SomeClassInMyApp.class, "/com/mycompany/myapp/templates"); 

注:その場合、あなたはこれを必要とします。

+0

ありがとう..これは私の問題を解決:) –

0

PATH環境変数を確認してください。ワークスペースのパスとプロジェクトパスが含まれていますか?そうでない場合は、そのエラーが発生する可能性があります。

あなたのエラーを解決するためのもう1つの簡単な方法は次の行にパスを変更することです:

テンプレートテンプレート= cfg.getTemplate( "SRC/response.get.html.ftl");代わりに「のsrc/response.get.html.ftl」の

は、ファイルへのルートディレクトリからのフルパスを挿入。すなわち:'はC://workspac/username/com/companyname/projectName/src/response.get.html.ftl'

注:Windowsを使用している場合は、ファイルが何のhidden extensionを持っていないことを確認してください。

+0

@roremy:返信いただきありがとうございます...私は瓶を作り、それを使用する必要があります。したがって、もし私がパスをハードコーディングすると、誰かがこのjarファイルを使うと動作しません。 –

+0

そのような状況では、2つのうちの1つを実行できます。プロジェクトパスをPATH環境変数に追加するか、組織の他のメンバーがアクセスできる汎用およびパブリックディレクトリにファイルを挿入します。あなたのローカルチェック(自分のコンピュータ上でファイルを使用できることを確認する)には、完全にハードコードされたパスを使用することができます。これは、そのエラーを解決するための小さなステップです。 – Rotem

0

私はあなたがこのような場合には、例えば、メソッドのgetResource()を使用することをお勧め:それは、コンパイラや他のビルドツールのためにのみありますよう

setIconImage(Toolkit.getDefaultToolkit().getImage(Menu.class.getResource("/resource/profut_1.PNG"))); 
関連する問題