Подтвердить что ты не робот

Как вставить ссылку на действие контроллера в шаблоне Play framework 2.0

Если у меня есть действие Application.show(tag: String), а также есть соответствующая запись маршрутизации, как я могу вставить ссылку на это действие в шаблон, не создавая URL-адрес вручную?

Я хотел бы сделать что-то вроде magiclink(Application.show("tag")).

4b9b3361

Ответ 1

Синтаксис:

<a href='@routes.Application.show("some")'>My link with some string</a>

По аналогии вы также можете генерировать URL-адреса в своих контроллерах. то есть. для перенаправления после некоторого действия:

public static Result justRedirect(){

    // use as String
    String urlOfShow = routes.Application.index().toString().

    // or pass as a redirect() arg
    return redirect(routes.Application.show("some"));
}

Ответ 2

Формат для размещения URL-адреса из вашего файла routes в вашем html выглядит следующим образом:

@routes.NameOfYourClass.nameOfyourMethod()

Итак, если в вашем файле routes у вас есть:

GET     /products                   controllers.Products.index()

И ваш класс Products выглядит следующим образом:

public class Products extends Controller {

    public Result index() {
        return ok(views.html.index.render());
    }
}

Ваш <a> должен выглядеть следующим образом:

<a href="@routes.Products.index()">Products</a>

Кроме того. Если ваш метод может принимать параметры, вы можете, конечно, передать их между круглой таблицей вашего метода следующим образом: index("Hi").

Я надеюсь, что этот ответ будет более понятным для понимания.

Ответ 3

Ah, так же просто, как @{routes.Application.show("tag")}.

Ответ 4

Принятый ответ правильный, но он не охватывает случай, когда контроллер находится в подпакетах, то есть: controllers.applications.MyFavouriteApplication.show()

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

Чтобы помещать ссылку без шаблона в шаблон, правильный шаблон @controllers.{sub-packages if any}.routes.{your class}.{your method}()

Итак, в этом случае это будет @controllers.applications.routes.MyFavouriteApplication.show()

ЕСЛИ вы использовали рекомендуемый шаблон воспроизведения с помощью @Inject для создания объектов контроллера Singleton, и если вы считали, что правильный ответ был @controllers.applications.MyFavouriteApplication.show(), вы получите ошибку, подобную этой:

Object MyFavouriteApplication is not a member of controllers.applications. Note: class MyFavouriteApplication exists, but it has no companion object.

Учитывая, что вы уже предоставили аннотацию @Inject() @Singleton, это действительно показалось бы очень странной ошибкой. Это может вызвать у вас вопрос, правильно ли вы строите проект. Определение истинной причины может стоить вам значительно в крови и сокровищах.