这里的问题分为两部分。第一部分更多是在UI上显示枚举,第二部分是处理不在服务端的枚举列表中的所选值。
首先。我有一个Enum类Gender定义如下。
public enum Gender {
Male("M"),
Female("F");
private String name;
private Gender(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
上面的枚举类在用户对象中引用,如下所示。
public class UserBO {
private Gender gender;
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
//other getters and setters
}
在控制器中,我通过执行此操作返回此userObject和性别的下拉列表。
@Controller
public class UserController {
@Autowired
private IUserService userServiceImpl;
@RequestMapping(value = "/user/{userId}/official", method = RequestMethod.GET)
public String getUserOfficialInfo(@PathVariable("userId") Integer userId, Model model) throws ServiceBusinessException {
UserBO userBO = userServiceImpl.findUserByUserId(userId);
model.addAttribute("user", userBO);
model.addAttribute("userId", userId);
model.addAttribute("genders", EnumSet.allOf(Gender.class));
return "official";
}
现在,性别不是用户对象中的必填字段,因此对于某些用户而言,可能根本不会填充此字段。我该如何在UI上处理这个条件。我在UI上使用百里香。
我在百里香的尝试过的代码就是这个
<label class="control-label col-xs-2">Marital Status</label>
<div class="col-xs-2">
<select id="maritalStatus" name="maritalStatus">
<option th:each="status : ${maritalStatuses}"
th:value="${status}"
th:text="${status}"
th:selected="${user.maritalStatus == null} ? 'Please select a Value' : ${status.equals(user.maritalStatus.name)}">
</option>
</select>
</div>
有人可以建议我如何处理这个问题?
同样来到问题的第二部分,假设用户没有在表单提交上选择任何性别,因为它不是必填字段。如何在UI上处理,以便服务不会在性别枚举列表中收到性别时抛出异常。
答案 0 :(得分:1)
最简单的方法是在表单中使用th:object
,如下所示:
<form th:object="${user}">
<div class="form-group">
<label class="control-label required"></label>
<select id="maritalStatus" class="form-control required" th:field="*{maritalStatus}">
<option value=""></option>
<option th:each="status : ${maritalStatuses}" th:value="${status}"
th:text="${status}"></option>
</select>
</div>
<div class="form-group">
<label class="control-label"></label>
<select id="gender" class="form-control" th:field="*{gender}">
<option value=""></option>
<option th:each="e : ${genders}" th:value="${e.name}"
th:text="${e}"></option>
</select>
</div>
</form>