【问题标题】:display Enum Values in UI with default value if not selected如果未选择,则在 UI 中使用默认值显示枚举值
【发布时间】:2017-11-08 05:15:43
【问题描述】:

这里的问题分为两部分。第一部分更多是在 UI 上显示枚举,第二部分处理不在服务端枚举列表中的选定值。

首先。我有一个枚举类 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 上使用 thymeleaf。

我在百里香上试过的代码是这样的

<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 上进行处理,以便服务在收到不在性别枚举列表中的性别时不会引发异常。

【问题讨论】:

    标签: java spring-mvc enums thymeleaf


    【解决方案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>
    

    【讨论】:

    • 这不考虑用户已经选择的内容。如果您要提交表单,这将非常有用。我更多的是查看 GET 调用响应来显示数据。在获取记录时,用户可能选择了也可能没有选择我们需要处理的性别值(因为它不是必填字段)
    • 在为现有用户加载表单时,将th:objectth:field 一起使用将负责用正确的值填充表单。
    • 我发布了另一个关于百里香枣的问题。你介意调查一下吗?请
    猜你喜欢
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 2016-10-10
    • 1970-01-01
    相关资源
    最近更新 更多