<form:option>默认值</form:option>

时间:2013-05-22 11:29:36

标签: java spring jsp spring-mvc

我在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等。我该怎么办?

3 个答案:

答案 0 :(得分:2)

在显示表单之前,您可以将ModelAttribute中“role”的值设置为“C”。当Spring MVC呈现页面时,它将选择正确的值。

答案 1 :(得分:0)

如果假设您的模型是OBJABC

class OBJABC {

private String abc;
private ENUMABC enumABC;

...Getters and Setters.....

}

它有enum 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上你应该设置相同的键作为模型属性

答案 2 :(得分: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();
}

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

您还需要注册一个自定义PropertyEditor,它知道如何将字符串'A','B','C','D'转换为Role enum实例。有一篇帖子here描述了自定义属性编辑器。