Forms spring表单:带有枚举的选项标记

Forms spring表单:带有枚举的选项标记,forms,spring,spring-mvc,enums,Forms,Spring,Spring Mvc,Enums,我在显示具有正确值的下拉列表时遇到问题。我正在使用、和标记,但我无法让它显示正确的选项。使用下面的代码,我应该只列出“选项2”、“选项7”和“选项8” *注意-我不想显示所有可能的枚举值,但出于某种原因,Spring似乎希望显示所有枚举值。它似乎完全忽略了提供给标记的列表 JSP标记 <spring-form:select path="selectOptions"> <spring-form:option value="" label="*** Select Optio

我在显示具有正确值的下拉列表时遇到问题。我正在使用
标记,但我无法让它显示正确的选项。使用下面的代码,我应该只列出“选项2”、“选项7”和“选项8”

*注意-我不想显示所有可能的枚举值,但出于某种原因,Spring似乎希望显示所有枚举值。它似乎完全忽略了提供给
标记的列表

JSP标记

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

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;
    }
    }

如果您使用的是
标记,您甚至不需要使用items属性。
选项标签:
呈现HTML“选项”标记的列表。根据绑定值适当设置“已选择”。
参考资料。
因此,对于您的需要,我想回到使用
就足够了。

这个问题的解决方案似乎是我在
标记中使用了属性“path”。它应该是“项目”,而不是“路径”

更正的JSP片段:

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

如果您创建了一个spring控制器,并且希望向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());
<form:select path="selection">
    <form:options items="${coins}" itemValue="shortName" itemLabel="fullName" />
</form:select>
将此枚举传递给您的模型:

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());
<form:select path="selection">
    <form:options items="${coins}" itemValue="shortName" itemLabel="fullName" />
</form:select>
在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());
<form:select path="selection">
    <form:options items="${coins}" itemValue="shortName" itemLabel="fullName" />
</form:select>


btw,我可以使用html和c标记来创建列表,但我希望能够正确地使用spring表单标记。我确信我只是错过了一些愚蠢的东西。我想你已经检查了getAvailableOptions()返回,以确保可用选项的列表是正确的?你能提供那段代码吗,以及在所有东西都呈现到浏览器后可能得到的HTML?availableOptions是我在控制器中简单创建的一个列表。是的,我已经确认它有我期望的3个选项。这样做会显示枚举中的每个值-这不是我想要做的。