0

我在jsp页面中有以下spring-mvc代码

<form:select path="role" id="idRole" >
    <form:option value="">Select a message role</form:option>
    <form:options items="${roles}" />
</form:select>

在 Java 类中,这里是模型属性:

@ModelAttribute("role")
public Role[] roles() {
    return Role.values();
}

值是:A、B、C、D。

默认情况下,我们需要在选项形式中具有“C”值!

当用户进入该页面时,他会在选项中看到预定义的 C 值,当然如果他想更改它 - 他会更改为 A、B 等。我该怎么办?

4

3 回答 3

2

在显示表单之前,您可以将 ModelAttribute 中“角色”的值设置为“C”。当 Spring MVC 渲染页面时,它会选择合适的值。

于 2013-05-22T11:41:19.163 回答
0

如果假设你的模型是 OBJABC

class OBJABC {

private String abc;
private ENUMABC enumABC;

...Getters and Setters.....

}

它有枚举 ENUMABC

public enum ENUMABC 
{


    A("A"),

    B("B"),

    C("C");


    private String value;


    private ENUMABC (String val)
    {
        value = val;
    }


    public String getValue()
    {
        return value;
    }


}

因此,如果您在加载表单时设置传递模型

你可以写

OBJABC obj = new OBJABC ();
obj.setEnumABC(ENUMABC.B);

model.addAttribute("modelAttribute",obj );

在控制器中

在 jsp 上,您应该设置与模型属性相同的键

于 2013-05-22T14:16:38.923 回答
0

@CodeChimp 的回答是正确的。您的模型应该包含用户从角色列表中的选择。但是列表和选择是分开的。

包含选项的模型可能如下所示:

public class RoleModel {

    private Role role;

    public void setRole(Role role) {
        this.role = role;
    }

    public Role getRole() {
        return this.role;
    }
}

因此,在您的控制器中,您将拥有:

@ModelAttribute("roleModel")
public RoleModel createModel() {
    return new RoleModel();
}

和:

@ModelAttribute("roles")
public Role[] getRoles() {
    return Role.values();
}

因此,path="role"<form:select>的 JSP 中的标记上的 映射到RoleModel. 而选择选项的角色列表来自roles模型属性。

您还需要注册一个自定义的 PropertyEditor,它知道如何将 String 'A'、'B'、'C'、'D' 转换为 Role 枚举实例。这里有一篇文章描述了自定义属性编辑器。

于 2013-05-22T14:40:59.110 回答