7

私は Scala で小さな MVC "フレームワーク" (非常に小さい) に取り組んでいます。ビュー ファイルを Scala コードとして記述できるようにして、コンパイラから多くの助けを得られるようにしたいと考えています。プリコンパイルは素晴らしいですが、私が本当に望んでいるのは、サーブレット コンテナーが要求に応じて特定のファイル (ビュー ファイル) を自動的にコンパイルする方法です。そのため、Jetty をシャットダウンしてすべてのソース ファイルを一度にコンパイルする必要はありません。 HTML の小さな変更を確認するためだけに、もう一度起動してください。

私はこれを .NET の .ascx ファイルでよく行います (ファイルには、XmlWriter を使用してマークアップを書き出す一連の C# コードを含むスクリプトレット タグが 1 つだけ含まれます)。このワークフローが気に入っています。変更を加えてブラウザを更新するだけですが、まだコンパイル中です!

私は Java の経験はあまりありませんが、JSP でも同様のことができるようです。Scalaでこのようなことが可能かどうか疑問に思っています。

私はこれを自分で構築することを検討しました(詳細はこちらを参照してください:http://www.nabble.com/Compiler-API-td12050645.html)が、他のものがある場合はむしろそれを使用したいと思います。

4

3 に答える 3

9

JSP/ASP/Erb のようなもので、Scala コードを使用するものが必要な場合は、Scalateを参照してください。

Scalate は、限定された JSP/JSF/JSTL EL 式言語の代わりに強力な Scala 式を使用できるようにする Scala ベースのテンプレート エンジンです - 完全に静的に型付けされているため、編集/コンパイル時にテンプレートのエラーがチェックされ、テンプレートがリロードされます編集中のその場で。

テンプレートの JSP/ASP スタイルについては、非常に JSP に似た ScalateのSspテンプレートを試してください。

主に HTML/XML マークアップを生成している場合は、Scalate の Scamlテンプレートも試してみることをお勧めします。これらはHAMLの Scala バージョンであり、DRY テンプレートにつながります。

于 2010-03-31T18:28:59.257 に答える
3

これは、テンプレート用の xml が埋め込まれた Scala でサーブレットを作成して JSP/フレームワークをスキップしたときに発生します。

class MyServlet extends HttpServlet {

def get(req) = {
 var title = "hello world"
 var link = "somepage"
 <html>
   <head><title>{ title }</title></head>
   <body><a href={ "/" + link }>Click</a></body>
 </html>
}

def doGet(req: HttpServletRequest, res: HttpServletResponse) = {
 val out = new PrintWriter(res.getOutputStream())
 out.println(get(req))
 out.close
}

}

私のソリューションには 2 つの部分があります。

  1. fscの代わりに使用scalac
  2. FireBug、特にそのeditボタンを使用します。

私が頻繁に行っている小さな変更は、スタイル シート (Jetty を再起動する必要はありません) に加えたり、HTML の代替案を試したりすることです。これを行う最善の方法は、HTML を右クリックし、[Inspect Element] をクリックしてから、firebug コンソールの編集ボタンを押して、その場で編集することです。これは、変更を加えるたびにサイトの状態を回復する必要がないことを意味します。

見栄えがよくなったら、変更を scala にコピーして make を押します。

于 2009-10-30T21:24:04.340 に答える