2

データベースのドメイン プロパティに次の形式で文字列が保存されているとします。

 "This variable needs to be interpolated: ${variable}."

コントローラーから、たとえば、この変数の値を渡します"FooBar"。お気に入り

<%
    def testVar = ${MyDomainObj?.get(1)?.myProperty}
%>
variable is: ${variable}
variable is: ${testVar}

次のような出力が得られます。

variable is: FooBar
variable is: "This variable needs to be interpolated: ${variable}."

データベースから直接返される ${variable} が補間されていないことを確認してください。データベースインスタンスに保存された式 ${variable} の正しい補間形式を取得するには、何をする必要がありますか。

4

2 に答える 2

3
  1. つまり、ユーザーがそのデータベース レコードにアクセスできる場合は、アクセスしない方がよいでしょう。アプリケーション内での任意のコードの実行を許可します。その実行コンテキストは、提供する変数Bindingによって制限されますが、とにかく多くのメソッドを持つドメイン オブジェクトになります。

  2. 安全であることを確認したら、その文字列を解釈する必要があります。GStringTemplateEngineには完全な例があります。

または、 Evalクラスがニーズに合うかもしれませんが、x、y、z という名前の 3 つ以上のパラメーターは受け入れません。

于 2013-02-12T08:41:27.190 に答える
3

Groovy テンプレートを試してください。

今と同じように、文字列をドメインに残すことができます。変数を文字列にバインドするには、 and のインスタンスとその上でgroovy.text.SimpleTemplateEngine呼び出しが必要です。createTemplateEnginemake

import groovy.text.SimpleTemplateEngine
// ...
def engine = new SimpleTemplateEngine()
def binding = ["variable": variable]
def testVar = engine.createTemplate(MyDomainObj?.get(1)?.myProperty).make(binding)

出力は期待どおりになります。

variable is: FooBar
variable is: "This variable needs to be interpolated: FooBar."
于 2013-02-12T08:41:59.300 に答える