Play 2.0: нажмите параметр URL для просмотра - PullRequest
1 голос
/ 23 марта 2012

Я только изучаю, как работает платформа 2.0. Поэтому у меня есть довольно простой вопрос: я просто хочу взять параметр URL и отобразить его в виде. Как ты это делаешь?

Я создал шаблон URL:

GET /test/:id controllers.Application.testOutput(id: Long)

и метод присвоения в Application:

public static Result testOutput(long id) {
        return ok(
                views.html.test.render(id)
        );
}

Как мне вызвать переменную id из представления? Я знаю, как вызывать методы, определенные в модели в представлении, но я не знаю, как отобразить переменную id в представлении. Это правильный способ передать переменную id методу рендеринга?

Я бы хотел понять основную концепцию, поэтому подробное объяснение ответа было бы здорово!

Ответы [ 3 ]

2 голосов
/ 25 марта 2012

Наш тестовый URL будет http://localhost:9000/greeter?message=hello, и в результате будет получен ответ text/plain с содержанием параметра message (т. Е. Привет).Сначала давайте определим маршрут

GET     /greeter           controllers.Greeter.say(message: String)

Затем создадим контроллер Greeter (я использую Java)

package controllers;

import play.*;
import play.mvc.*;

// This lets you call the template without the views.html prefix
// import views.html.*;
import views.txt.*;

public class Greeter extends Controller {

  public static Result say(String message) {
    return ok(greeter.render(message));
  }

}

Вы можете видеть, что ok() вызывает функцию scala, определенную вфайл app/views/greeter.scala.txt Вот содержимое этого файла (первая строка определяет параметр сообщения типа String, используемый внутри функции

@(message: String)
I'm the content. Note that you can place
anything you want here. Scala expressions
begin with the '@@' character. For example
next line contains the content of message:
@message

В этом случае я использовал .txt для расширений файлов, потому что я хотел простойтекстовый ответ. Если вы хотите произвести вывод HTML, просто создайте файл .scala.html

0 голосов
/ 24 марта 2012

В Play 2 шаблоны - это простые функции, поэтому вы можете вызывать их так же, как и любую другую функцию.

0 голосов
/ 24 марта 2012

Запрос клиента обрабатывается маршрутизатором Play , который, в свою очередь, перенаправляет его на некоторое действие (которое является методом внутри контроллера)

GET    /greeter             Greeter.say   

Из документа Play

Последняя часть определения маршрута - это вызов Java.Эта часть определяется полным именем метода действия.Метод действия должен быть открытым статическим методом void класса Controller.Класс Controller должен быть определен в пакете controllers и должен быть подклассом play.mvc.Controller.

Вы можете добавить пакет Java перед именем класса Controller, если он не определен непосредственно в пакете controllers.,Сам пакет контроллеров является неявным, поэтому вам не нужно указывать его

Внутри действия вы можете получить параметры через объект param или напрямуюподпись метода:

public static void say(String what) {
    ... 
}

, и вы можете передавать объекты в шаблон с помощью render(what), как вы делаете в своем примере.

Наконец ваш шаблон может получить доступ к этим объектам с синтаксисом ${what}.

РЕДАКТИРОВАТЬ Это способ Play 1.xделать вещи.Я не заметил твой тег, но все еще надеюсь, что это поможет.Play2 использует новый движок шаблонов Scala, вот руководство .Кажется, вы должны объявить свои параметры в начале шаблона, а затем вы можете получить к ним доступ через синтаксис @what.Это потому, что шаблон теперь является скомпилированной функцией Scala, поэтому он может выполнять проверку типов во время компиляции и тому подобное.Вы передаете параметры этой функции с помощью render(what) (как и вы).Лично я не пользуюсь Play2.0 самостоятельно: это большое улучшение с технической точки зрения за счет того, что он менее интуитивен и более многословен.Я не думаю, что более простые проекты выигрывают от этих улучшений

...