Как вставить ссылку на действие контроллера в шаблоне Play framework 2.0
Если у меня есть действие Application.show(tag: String)
, а также есть соответствующая запись маршрутизации, как я могу вставить ссылку на это действие в шаблон, не создавая URL-адрес вручную?
Я хотел бы сделать что-то вроде magiclink(Application.show("tag"))
.
Ответы
Ответ 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
, это действительно показалось бы очень странной ошибкой. Это может вызвать у вас вопрос, правильно ли вы строите проект. Определение истинной причины может стоить вам значительно в крови и сокровищах.