1

freemarkerしたがって、提供されたデータモデルにその値が含まれていない場合、マークアップを保持する方法があるかどうかを現在把握しようとしています。については知って${VALUE!"DEFAULTVALUE"}いますが、FreeMarker マークアップでは機能しません。

基本的に、私がやろうとしていることは、次のようなものです。

${TEST}${1}${2}

データモデルが次のように設定されている場合:

Map root = new HashMap();
root.put("1","ONE");
root.put("2","TWO");

これを Template オブジェクトに適用すると、nulltest が定義されていないため、エラーがスローされます。私がやろうとしているTESTのは、未定義の場合、テンプレートは引き続き次のように処理する必要があるということです:

${TEST}ONETWO

FreeMarkerライブラリの機能を使用してこれを行う方法はありますか? パターン マッチングでこれを行うことができますが、もっと簡単な方法があるはずです。

ありがとう。

4

2 に答える 2

2

?has_contentforを使用してみてくださいTEST。おそらくそれが役立つでしょう。しかし、それがあなたの要件に合っているかどうかはわかりません。

于 2012-11-20T08:20:54.890 に答える
0

FreeMarker ライブラリを使用すると、カスタム例外ハンドラを作成できます。

残念ながら、FreeMarker は失敗した正確なトークンを提供しませんが、エラー メッセージから解決することができます。

        cfg.setTemplateExceptionHandler(new TemplateExceptionHandler() {
        @Override
        public void handleTemplateException(TemplateException te, Environment e, Writer writer) throws TemplateException {
            try {
                String errorString = te.getFTLInstructionStack();
                int startIndex = errorString.indexOf('$');

                if (startIndex != -1) {
                    int endIndex = errorString.indexOf('}', startIndex);
                    if (endIndex != -1) {
                        writer.write(errorString.substring(startIndex, endIndex + 1));
                    }
                    else {
                        throw te;
                    }
                }
                else {
                    throw te;
                }
            }
            catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    });
于 2013-11-14T17:34:44.430 に答える