5

これは非常に基本的なはずですが、ウェブでそれについて何も見つけることができません..

freemarker で Spring MVC を使用しています。ここで、事前定義されたリストから値を選択できるフォームをページに追加したいと考えています (バックエンドでデータベース アクセスが必要です)。

私のコントローラー:

@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public ModelAndView get(@PathVariable Integer id) {

    // stuff..
    ModelAndView mav = new ModelAndView();

    mav.addObject("targetObject", new TargetObject());
    mav.addObject("options", Arrays.asList("a", "b", "c"));
    mav.setViewName("someview");

    return mav;
}

freemarkers のスプリング サポートを見つけたので、次のように試したものをspring.ftl使用する必要があるようです。<@spring.formSingleSelect>

someView.ftl:

<#import "../spring.ftl" as spring />

<form action="somePath" method="POST">
    <@spring.formSingleSelect "targetObject.type", "options", " " />
    <input type="submit" value="submit"/>
</form>

したがって、 targetObject.type はマクロによって自動的にバインドされているようです。

しかし、マクロがオプションを作成できるようにするにはどうすれば私のオプションを freemarker シーケンスに入れることができるでしょうか?

今私は得る:

Expected collection or sequence. options evaluated instead to freemarker.template.SimpleScalar on line 227, column 20 in spring.ftl.
The problematic instruction:
----------
==> list options as value [on line 227, column 13 in spring.ftl]
 in user-directive spring.formSingleSelect [on line 53, column 9 in productBase/show.ftl]
----------

私も試しました:

<@spring.bind "${options}" />

これらの線に沿ってさらに多くのことを行いましたが、成功しませんでした:

freemarker.core.NonStringException: Error on line 48, column 18 in someView.ftl
Expecting a string, date or number here, Expression options is instead a freemarker.template.SimpleSequence

助けてくれてありがとう!

4

2 に答える 2

8

多くの言い換えと再考の後、私は最終的に解決策を発見しました:

初め

私は明らかに自分の選択を豆に保持させる必要があります

2番

オプションは文字列リストとして初期化され、Spring MVC によってページに提供される必要があります。

public ModelAndView get() {

    // ...
    ModelAndView mav = new ModelAndView();
    List<String> options = Arrays.asList(getOptionsFromDatabaseAndConvertToStringList());
    mav.addObject("options",options );
    mav.setViewName("someview");

    return mav;
}

三番

optionsfreemarker テンプレートにバインドする必要があり、他の freemarker 変数と同じようにアクセスできます (つまり、引用符はありません)。

<@spring.bind "options" />

<form action="whatever" method="POST">
    <@spring.formSingleSelect "targetBean.choice", options, " " />
    <input type="submit" value="submit"/>
</form>
于 2012-07-11T14:42:04.947 に答える