JSP или .ascx эквивалент для Scala? - PullRequest
7 голосов
/ 30 октября 2009

Я работаю над небольшой "структурой" MVC (она действительно очень мала) в Scala. Я хотел бы иметь возможность писать свои файлы просмотра в виде кода Scala, чтобы я мог получить большую помощь от компилятора. Предварительная компиляция - это здорово, но я действительно хочу, чтобы контейнер сервлетов автоматически компилировал определенные файлы (мои файлы просмотра) по запросу, чтобы мне не пришлось выключать Jetty и компилировать все мои исходные файлы сразу, а затем запустите его снова, чтобы увидеть небольшие изменения в моем HTML.

Я часто это делаю с файлами .ascx в .NET (файл будет содержать только один тег скриптлета с кучей кода C # внутри, который записывает разметку с использованием XmlWriter), и мне нравится этот рабочий процесс. Вы просто вносите изменения, а затем обновляете свой браузер, но он все еще компилируется!

У меня нет большого опыта работы с Java, но, кажется, возможно сделать это и с JSP. Мне интересно, возможно ли подобное в Scala.

Я сам пытался построить это (см. Дополнительную информацию здесь: http://www.nabble.com/Compiler-API-td12050645.html), но я бы предпочел использовать что-то другое, если оно там есть.

Ответы [ 3 ]

9 голосов
/ 31 марта 2010

Если вам нужно что-то вроде JSP / ASP / Erb, но с использованием кода Scala, вы можете взглянуть на Scalate .

Scalate - это механизм шаблонов, основанный на Scala, который позволяет вам использовать мощные выражения Scala вместо ограниченного языка выражений JSP / JSF / JSTL EL - при этом он полностью статически типизирован, поэтому шаблоны проверяются во время редактирования / компиляции на наличие ошибок - и шаблоны перезагружаются на лету по мере их редактирования.

Для шаблонов в стиле JSP / ASP попробуйте шаблоны Ssp в Scalate, которые очень похожи на JSP.

Если вы в основном генерируете разметку HTML / XML, я бы также рекомендовал попробовать шаблоны Scaml в Scalate - это версии Scala HAML , которые приводят к действительно СУХИМЫМ шаблонам

3 голосов
/ 31 октября 2009

Это приходит ко мне, когда я пропускаю JSP / frameworks, написав сервлеты в Scala со встроенным xml для шаблонов:

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
}

}

Мое решение состоит из двух частей:

  1. Используйте <a href="http://www.scala-lang.org/docu/files/tools/fsc.html" rel="nofollow noreferrer">fsc</a> вместо scalac
  2. Используйте FireBug , в частности его кнопку edit.

Постоянные небольшие изменения, которые я делаю, касаются таблицы стилей (которая не требует перезапуска Jetty) или игры с возможными альтернативами HTML. Лучший способ сделать это - щелкнуть правой кнопкой мыши HTML, щелкнуть Inspect Element, затем нажать кнопку редактирования в консоли Firebug и отредактировать его на месте. Это означает, что больше не нужно восстанавливать состояние сайта каждый раз, когда вы вносите изменения.

Когда все будет выглядеть правильно, скопируйте изменения в scala и нажмите make.

2 голосов
/ 30 октября 2009

Есть много альтернатив. Например, одна альтернатива - это использование JRebel (ранее JavaRebel) и процесс фоновой компиляции при изменении (например, mvn scala:cc с Maven).

...