2

テキストエリアの先頭/末尾のスペースに問題があるようです!

最後のユーザーがテキストエリアに複数の行にまたがる先頭/末尾のスペースで値を入力した場合、先頭と末尾の 1 つのスペースを除いて、それらはすべて消えます。

例: テキストボックスに次の行がある場合: (引用符はスペースを説明するためだけに表示されます)

"   3.0"
"  2.2  "
"0.3   "

バックエンドに次のように保存されます

"<textarea id=... >   3.0/n  2.2  /n0.3   </textarea>"

私のテンプレート (この部分の) はかなり単純です (テンプレート全体、それほど簡単ではありません...):
${label} ${textField}

値を再度読み込むと、getTextField() が先に引用した目的の文字列を適切に取得していることに気付きます... しかし、HTML ページを見ると、それが表示されています

" 3.0"
"2.2"
"0.3 "

もちろん、「View Sourcing」の場合、getTextField() に文字列が表示されません。

私が試したこと:

  • バックエンドに setWhitespaceStripping(false); があることを確認してください。設定
  • <#ftl strip_whitespace=false> の追加
  • ${textField} と同じ行に <#nl> を追加する

何を試しても、補間後にスペースを保持できません。どんな助けでも大歓迎です!

4

1 に答える 1

2

たぶんあなたは<#compress>...</#compress>(または<@compress>...</@compress>)ブロックの中にいます。これらは、実行時に出力全体をフィルタリングし、出力元に関係なく空白を減らします。このディレクティブは使用しないことをお勧めします。出力はやや小さくなりますが、実行時のオーバーヘッドがあり、このような場合に出力が破損する可能性があります。

FreeMarker補間は、挿入された値から空白を削除したり、値を変更したりすることはありません。ただし、字句的<#escape ...>....</#escape>にブロック内にいる場合は、自動的に適用されます。ただし、空白を破壊するエスケープ式がある可能性は低いです。ただし、確か<#escape ...>に、同じテンプレートファイルに何かがあるかどうかを確認できます(ランタイムディレクティブではないため、他の場所で確認する必要はありません)。

strip_whitespace#nt解析中(実行前)に空白を削除するだけなので、これらは無関係です。

次のように挿入する前に、挿入されたに空白が残っているかどうかを確認することもできます。

${textField?replace(" ", "[S]")?replace("\n", "[N]")?replace("\t", "[T]")}

それらがすでに削除されていることがわかった場合、それはおそらく、値がデータモデルに入れられる前にそれらがすでに削除されたことを意味します。それで、FreeMarkerでなければ。

于 2013-01-08T21:50:49.937 に答える