如何逃避@ in play框架模板(视图和标签)?如果在play框架的任何视图中添加"@",它将由模板处理器自动处理.即使是电子邮件地址或推特帐户.
我有一些配置问题,我看不到.我已按照最新twirlREADME中提供的说明进行操作,但html根据编译器未定义包.
我已将sbt-twirl插件包含在project/plugins.sbt文件中
addSbtPlugin("com.typesafe.sbt" % "sbt-twirl" % "1.0.3")
Run Code Online (Sandbox Code Playgroud)在project/Build.scala我启用了插件
lazy val root = Project(id = "proj", base = file("."))
.enablePlugins(play.twirl.sbt.SbtTwirl)
.settings(rootSettings: _*)
Run Code Online (Sandbox Code Playgroud)我已经放置page.scala.html在src/main/twirl子目录(直接或使用com/somethin/cool路径)
现在,如果我试图导入html包(或com.somethin.cool.html),编译器会抱怨它未定义.我可以使用'twirlCompile'命令编译模板,它们在target子目录中正确生成,但它们对主项目是不可见的.
是否可以将Twirl与Spring MVC一起用作视图技术?我想用一些代替JSP的东西,Apache Tiles对我来说很麻烦.旋转视图技术为Play Framework看起来非常酷,类似于ASP.NET Razor.
https://www.playframework.com/documentation/2.3.x/JavaTemplates
我做了一个快速的谷歌搜索,但没有发现太多.
有没有人获得IntelliJ IDEA识别*.scala.xml旋转模板?HTML模板似乎很好地被IDE选中,似乎是唯一受支持的模板,但任何其他类型的模板都不会被拾取.
我需要在我的sbt项目中预处理一些Twirl模板.是否可以在build.sbt中定义一个任务,该任务将在 Twirl插件编译其模板之前运行?
我有一个通用模板play 2.6,我希望传递可变数量的HtmlContents.我已经定义了template这样的(包括我改变任何东西的隐含参数):
@(foo: String)(content: Html*)(implicit bar: Bar)
Run Code Online (Sandbox Code Playgroud)
在模板上,这个工程fine--我可以解剖content与for和渲染它,因为我想要的.但是,我还没有找到一种从底层模板调用变量参数的简洁方法.
例如,我有一个名为"Baz"的视图:
@(something: String)(implicit bar: Bar)
Run Code Online (Sandbox Code Playgroud)
在其中,我尝试template使用多个Html参数调用.我尝试过以下方法:
@template("fooString"){{123},{abc}}
and
@template("fooString")({123}, {abc})
and
@template("fooString"){{123}, {abc}})
Run Code Online (Sandbox Code Playgroud)
和其他各种排列,但在一个封闭的括号内,它似乎将字面上的所有内容解释为HtmlContentvararg中的单个参数.
然而,这最终按照我的意图工作,传递了多个HtmlContents:
@template("fooString")(Html("123"), Html("abc"))
Run Code Online (Sandbox Code Playgroud)
这样可以工作,我可以使用三引号内插字符串作为一个大的Html块 - 但似乎应该有一个更简洁的方法来执行此操作,并且字符串插值是危险的,因为它不会执行html转义.
有没有办法使用{附带的语法执行此操作?我想更深入地了解基础层面上实际发生的事情,以及如何在括号中解析并生成HtmlContent.
Twirl生成的*.scala文件包含将生成的代码绑定到源模板中的行的信息.是否有选项可以在模板的渲染功能的输出中进一步包含此信息?
如果没有这样的选项,推荐的实现此功能的方法是什么?知道我找不到生成的*.scala模板文件的调试信息被消耗的地方......
如果有人有使用Vue.js作为Play Framework应用程序前端的经验,我想知道推荐的方法。
我当前的设置是一个 Play 应用程序(在 Java 中),带有用于处理 REST 请求的模型、控制器和 DAO - 这实际上是我的后端。Now Play 还允许您使用Twirl模板库来创建可用作静态 HTML 的视图。然而,我发现 Twirl 语法不必要地复杂且难以为单页应用程序组合视图。我更喜欢使用像 Vue 这样的 UI 工作更精细的东西
我的研究显示了将 Vue 集成到 Play 的两种选择:
使用Webjars:
它是某种 Play 插件,可将JQuery等 JavaScript 库捆绑到.jar可由 Play 部署的文件中。坦率地说,我不明白这个过程,我不知道这将如何让我在.vue文件中写入我的视图。
使用与 Play 后端松散连接的单独 Vue 项目:
这是我在发布此问题之前的当前展望。我想我可以使用vue-cli和NPM创建一个标准的 Vue Webpack项目,然后我可以以 RESTful 方式调用 Play 后端 API。这样做的问题是单独部署后端和前端的额外复杂性。我更喜欢一个 Play 应用程序(项目文件夹)中的所有内容——后端和前端。
其中哪一个是要走的路?我也乐于接受新的建议。对于任何建议,请解释该方法的优点,最好提供一个最小的工作示例(Github 存储库就足够了)。
谢谢。
我想将 HTML 文本作为参数传递给 Twirl 模板中的消息,但是当渲染模板时,HTML 会被转义。例如,如果我的messages文件有:
my.message=Click {0} to proceed
Run Code Online (Sandbox Code Playgroud)
我的template.scala.html有
<p>@Messages("my.message", Html("<a href="/">here</a>"))</p>
Run Code Online (Sandbox Code Playgroud)
当我在浏览器中打开页面时,该<a href="/"here</a>部分会被转义,因此我没有可点击的链接。有什么办法可以实现这一点吗?
我正在迁移到 Scala 2.13。
args: (Symbol, String)*在 Play Twirl 模板中给了我这个警告:
不推荐将显式数组值传递给 Scala varargs 方法(自 2.13.0 起),并且会产生防御性副本;使用更高效的非复制 ArraySeq.unsafeWrapArray 或显式 toIndexedSeq 调用
这是整个模板:
@(action: play.api.mvc.Call, args: (Symbol, String)*)(body: => Html)
<form method="@action.method"
@toHtmlArgs(args.toMap)>
@body
</form>
Run Code Online (Sandbox Code Playgroud)
该函数的调用方式如下:
@helper.formRelative(action = ..., Symbol("id") -> "assignForm", Symbol("class") -> "ui form") { ..body.. }
Run Code Online (Sandbox Code Playgroud)
由于我在很多地方都使用它,有没有办法在不更改签名的情况下解决这个问题?
我尝试了不同的事情,例如:
toSeq:@toHtmlArgs(args.toSeq.toMap)@toHtmlArgs(args.toMap)出现的警告。