1

複数選択をオブジェクトにバインドしようとしています。フォームが作成され、投稿が機能し、何も選択しなくてもエラーは発生しません。言語を選択すると、オブジェクトは言語値を取得しますが、フォームが壊れます。

        HashMap<String, String> languages = new LinkedHashMap<String, String>();
    languages.put("eng","english");
    languages.put("ger","german"); 

    session.setAttribute("languages", languages);

<@spring.formMultiSelect "advancedSearch.languages", languages, " "/>

AdvancedSearch クラスには

文字列言語;

そして、値「eng、rus」を取得しますが、値を取得した後、フォームは機能しません。

エラーメッセージ

HTTP エラー 500

/opac/advSearch へのアクセスに問題があります。理由:

Expected collection or sequence. list evaluated instead to

spring.ftl の 368 行目、12 列目の freemarker.template.SimpleScalar。のせいで:

コレクションまたはシーケンスが必要です。リストは、spring.ftl の 368 行目、12 列目の freemarker.template.SimpleScalar に代わりに評価されます。の

問題のある命令:

==> list list as nextInList [spring.ftl の 368 行目、5 列目] in user-directive spring.formMultiSelect [advancedSearchView.ftl の 59 行目、41 列目]

問題は、言語を保存する方法にあると思います。今はストリングです。他の方法で保持する必要があると思います。String[] List を試しましたが、うまくいきません。

4

1 に答える 1

2
<@spring.bind "advancedSearch.languages"/>
<#assign selectedLangs = spring.status.value?default(" ")>
<select multiple="multiple" id="${spring.status.expression}" name="${spring.status.expression}"}>
    <#list languages?keys as value>
    <#if selectedLangs?contains(value) >
        <#assign isSelected = true>
    <#else>
        <#assign isSelected = false>
    </#if>
    <option value="${value?html}"<#if isSelected> selected="selected"</#if>>${languages[value]?html}
    </#list>
</select>

これはうまくいきました!

于 2010-03-11T16:16:19.700 に答える