12

ドロップダウン リストを適切な値で表示するのに問題があります。とタグを使用して<spring-form:select>いますが、正しいオプションを表示することができません。次のコードでは、「オプション 2」、「オプション 7」、および「オプション 8」のみをリストする必要があります。<spring-form:options><spring-form:option>

*注 - 考えられるすべての Enum 値を表示したいわけではありませんが、何らかの理由で Spring はそれらすべてを表示したいようです。<spring-form:options>タグに提供されるリストを完全に無視しているようです。

JSP タグ

<spring-form:select path="selectOptions">
    <spring-form:option value="" label="*** Select Option ***" />
    <spring-form:options path="${availableOptions}" />
</spring-form:select>

列挙型

public enum SelectOptions {

    // CHECKSTYLE_OFF: LineLength

    /**
     * Option 1.
     */
    OPTION_1(1, "Option 1"),
    /**
     * Option 2.
     */
    OPTION_2(2, "Option 2"),
    /**
     * Option 3.
     */
    OPTION_3(3, "Option 3"),
    /**
     * Option 4.
     */
    OPTION_4(4, "Option 4"),
    /**
     * Option 5.
     */
    OPTION_5(5, "Option 5"),
    /**
     * Option 6.
     */
    OPTION_6(6, "Option 6"),
    /**
     * Option 7.
     */
    OPTION_7(7, "Option 7"),
    /**
     * Option 8.
     */
    OPTION_8(8, "Option 8"),
    /**
     * Option 9.
     */
    OPTION_9(9, "Option 9"),
    /**
     * Option 10.
     */
    OPTION_10(10, "Option 10");

    private int id;
    private String description;

    /**
     * Constructor.
     *
     * @param id the id
     * @param description the description
     */
    private SelectOptions(final int id, final String description) {
        this.id = id;
        this.description = description;
    }

    /**
     * Retrieves the {@link SelectOptions} associated with the passed in id.
     *
     * @param id the id associated with the SelectOptions
     * @return the SelectOptions
     */
    public static SelectOptions getInstance(final int id) {

        for (final SelectOptions selectOptions : SelectOptions.values()) {
            if (selectOptions.id == id) {
                return selectOptions;
            }
        }

        throw new IllegalArgumentException("SelectOptions could not be determined with id [" + id + "]");
    }

    /**
     * Retrieves the {@link SelectOptions} associated with the passed in description.
     *
     * @param description the description associated with the SelectOptions
     * @return the SelectOptions
     */
    public static SelectOptions getInstance(final String description) {

        for (final SelectOptions selectOptions : SelectOptions.values()) {
            if (selectOptions.description == description) {
                return selectOptions;
            }
        }

        throw new IllegalArgumentException("SelectOptions could not be determined with description [" + description + "]");
    }

    /**
     * Simple Getter.
     *
     * @return the id
     */
    public int getId() {
        return this.id;
    }

    /**
     * Simple Setter.
     *
     * @param id the id to set
     */
    public void setId(final int id) {
        this.id = id;
    }

    /**
     * Simple Getter.
     *
     * @return the description
     */
    public String getDescription() {
        return this.description;
    }

    /**
     * Simple Setter.
     *
     * @param description the description to set
     */
    public void setDescription(final String description) {
        this.description = description;
    }
}

コントローラ

public class SpringController implements SpringControllerInterface {

    /**
     * /WEB-INF/jsp/myJSP.jsp.
     */
    private static final String PAGE = "/WEB-INF/jsp/myJSP.jsp";

    /**
     * {@inheritDoc}
     */
    @Override
    public ModelAndView load(final Model model) {

        final ModelAndView mav = new ModelAndView(PAGE);

        final List<SelectOptions> availableOptions = this.getAvailableOptions();

        mav.addObject("availableOptions", availableOptions);

        return mav;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public ModelAndView save(final Model model) {

        final ModelAndView mav = new ModelAndView(PAGE);

        // TODO

        return mav;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public Model getModel() {
        return new ModelImpl();
    }

    /**
     * @return a list of available options
     */
    public List<SelectOptions> getAvailableOptions() {

        final List<SelectOptions> availableOptions = Lists.newArrayList();

        availableOptions.add(SelectOptions.OPTION_1);
        availableOptions.add(SelectOptions.OPTION_7);
        availableOptions.add(SelectOptions.OPTION_8);

        return availableOptions;
    }
    }

モデル

public class ModelImpl implements Model {

    private SelectOptions selectOptions;

    /**
     * Simple Getter.
     *
     * @return the selectOptions
     */
    @Override
    public SelectOptions getSelectOptions() {
        return this.selectOptions;
    }

    /**
     * Simple Setter.
     *
     * @param selectOptions the selectOptions to set
     */
    @Override
    public void setSelectOptions(final SelectOptions selectOptions) {
        this.selectOptions = selectOptions;
    }


}
4

3 に答える 3

16

スプリング コントローラーを作成し、列挙型を jsp ページに渡したい場合は、次のようにできます。

列挙例:

public enum Coin {

    HEADS("Heads", "heads"),
    TAILS("Tails", "tails");

    private final String fullName;
    private final String shortName;

    private Coin(String fullName, String shortName) {
        this.fullName = fullName;
        this.shortName = shortName;
    }

    public String getFullName() {
        return fullName;
    }

    public String getShortName() {
        return shortName;
    }

}

この列挙型をモデルに渡します:

model.addObject("coins", Coin.values());

次のフォームを使用してjspページで使用します。

<form:select path="selection">
    <form:options items="${coins}" itemValue="shortName" itemLabel="fullName" />
</form:select>
于 2015-02-24T09:07:32.370 に答える
6

この問題の解決策は、<spring-form:options>タグで属性「path」を使用していたことのようです。「パス」ではなく「アイテム」である必要があります。

修正されたJSPフラグメント:

<spring-form:select path="selectOptions">
    <spring-form:option value="" label="*** Select Option ***" />
    <spring-form:options items="${availableOptions}" />
</spring-form:select>
于 2013-02-25T20:00:20.317 に答える
0

タグを使用している場合は、items 属性を使用する必要さえありません<spring-form:options>
options タグ:
HTML 'option' タグのリストをレンダリングします。バインドされた値に基づいて、「選択済み」を適切に設定します。
参照Spring フォーム tld . したがって、必要に応じて、 JSTLコアにフォールバックするだけで<spring-form:option/>十分だと思います。

于 2013-02-25T18:57:15.397 に答える