我在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等。我该怎么办?
答案 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描述了自定义属性编辑器。