spring-form:带有枚举的选项标签

2024-04-11

我在显示具有正确值的下拉列表时遇到问题。我正在使用<spring-form:select>, <spring-form:options> and <spring-form:option>标签,但我无法让它显示正确的选项。使用以下代码,我应该只列出“选项 2”、“选项 7”和“选项 8”。

*注意 - 我不想显示所有可能的枚举值,但由于某种原因 Spring 似乎想显示所有这些值。它似乎完全忽略了提供给<spring-form:options> tag.

JSP Tags

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

Enum

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

Model

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


}

如果您创建了一个 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());

在您的 jsp 页面中使用以下形式:

<form:select path="selection">
    <form:options items="${coins}" itemValue="shortName" itemLabel="fullName" />
</form:select>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring-form:带有枚举的选项标签 的相关文章

随机推荐

  • 窗口函数:last_value(ORDER BY ... ASC) 与 last_value(ORDER BY ... DESC) 相同

    样本数据 CREATE TABLE test id integer session ID integer value integer INSERT INTO test id session ID value VALUES 0 2 100 1
  • 如何正确声明子类的实例?

    我目前正在使用 Java 进行基于文本的冒险 目的是使用它作为测试平台 尝试我从正在阅读的这本 Java 书中学到的新东西 我现在尝试声明一个子类的实例 因为玩家编写了脚本来查找它 父类是Item它有两个子类 Weapon and Armo
  • 如何在 Slidify 中使用 MathJax?

    似乎只需声明即可widget mathjax在扉页中 但我无法正确呈现公式 有什么遗漏的吗 谢谢 UPDATE 我查了一下最终结果index html 发现很多 都变成了 em or em 似乎 slideify 正在混合 在 LaTeX
  • 如何获取默认java安装的cacerts位置?

    我正在研究如何获取位置cacerts默认java安装 当你没有JAVA HOME or JRE HOME定义的 我需要一个至少适用于OS X and Linux Yes java v假设可以工作 Under Linux 找到位置 JAVA
  • Libgdx 模板和形状渲染器

    我正在尝试完成这样的事情 样本图像 https i stack imgur com CkdSO jpg 整个屏幕将是黑色的 然后三角形的内部是只会出现的部分 我尝试使用剪刀 但它是矩形的 原始图片来源 https www html5rock
  • 使用 LINQ 将对象属性组合到列表中

    假设我在 objectX 上有属性 num1 num2 num3 我想获取一个 objectX 列表并创建一个用 num1 num2 num3 值填充的整数列表 下面是使用 System Drawing Point 的示例 Point p1
  • Ctypes 在使用 CMake 创建的共享库中找不到符号

    我在 linux 中创建共享库的 CMake 设置类似于 SET CMAKE CXX FLAGS fPIC SET LIB UTILS SRC Utils cpp ADD LIBRARY UTILS SHARED LIB UTILS SRC
  • 在Python中定义函数之前是否可以调用它? [复制]

    这个问题在这里已经有答案了 如何定义函数的原型 我在其定义之上调用了我的函数 但它不起作用 python 解释器无法识别我的函数 例如 my function def my function print Do something Unres
  • 单例类 iPhone

    好吧 我试图避免全局变量 所以我阅读了单例类 这是尝试设置和读取可变数组 但结果为空 Content h interface Content NSObject NSMutableArray contentArray Content shar
  • 在 Android 中,当变量发生变化时如何采取行动?

    在 Android 应用程序 或者更一般的 Java 应用程序 如果没有什么不同的话 中 每当变量的值发生变化时调用方法的最佳方式是什么 您真正想要做的是设置事件驱动模型以在事件发生时触发侦听器 在您的情况下 假设变量值已更改 这不仅对于
  • 如何在 Emacs 中将 ESC 绑定到 Keyboard-Escape-quit?

    Normally keyboard escape quit http www gnu org software emacs manual html node emacs Quitting html is bound to EscEscEsc
  • 在 HTTP 和 HTTPS 之间切换时,JSessionID 会被覆盖。怎么解决?

    我们遇到以下情况 Go to http website 并单击链接http 网站 appX检查 cookie 是否显示 JSessionID 且 secure NO 打开另一个浏览器窗口或选项卡并转到https website 并单击链接h
  • 相对于彼此对齐 TextView

    我有两个 TextView 第一个 TextView 包含动态文本 可以小也可以大 第二个 TextView 包含静态小文本 第二个 TextView 应位于第一个 TextView 的右侧 它应该是这样工作的 when first tex
  • ServerSocket中setReuseAddress的作用是什么?

    我有一个简单的逻辑 Java 来检查端口是否已在使用中 public static boolean isPortInUse int port ServerSocket socket null try socket new ServerSoc
  • 如何在 swagger 中提供 XML 参数示例

    我在用Swashbuckle 5 6 0 and Swashbuckle Examples 3 5 1记录 WebApi2 项目 我有一个使用 XML 正文并返回文本响应的操作 我希望文档包含 XML 输入的示例 例如
  • 在R中,负索引有什么作用?

    我正在将程序的一部分 不足以编译和运行 从 R 移植到 C 我对 R 不熟悉 我使用在线参考资料做得很好 但被以下行难住了 cnt2 2 lt cnt2 1 我猜测 cnt2是一个二维矩阵 cnt2 2是一个用句点 声明的新变量使用方式与字
  • 如何在 Play Framework 关闭期间等待 Actor 停止?

    下面的代码抛出一个java lang IllegalMonitorStateException当我关闭播放服务器时出现异常 它是由a 等待 1000 调用onStop方法 谁能告诉我为什么会出现这种情况以及如何优雅地等待 Actor 在 P
  • 如何读取文件中的数据,并将其传递给结构〜> C

    好的 我的主目录中有一个名为 Graduates txt 的文件 我有一个便携式程序来查找主目录 然后我打开该文件进行读取 文件中的数据看起来像这样 year firstName lastName 我需要从该文件中获取这些数据 并将其分离到
  • 了解 Elm 中的通用联合类型

    我无法理解到底是什么Html msg类型是什么 或者它如何使用 我在 VirtualDom elm 中找到了这行代码 其中Html msg似乎是以下别名 type Node msg Node 这看起来像一个带有一个类型参数的通用联合类型 m
  • spring-form:带有枚举的选项标签

    我在显示具有正确值的下拉列表时遇到问题 我正在使用