使用Apache FileItem从复选框获取布尔值的优雅方法

时间:2018-01-01 13:37:05

标签: java servlets checkbox multipartform-data apache-commons-fileupload

表格中有复选框输入:

<form action='${pageContext.request.contextPath}/register' method="POST"
      enctype="multipart/form-data">

        <div>
            <label class="form-check-label">
                <input id="news_feed" name="news_feed" class="form-check-input" type="checkbox" value="${sessionScope.bean.interestedInNewsFeed}">
                I want to receive updates via email.
            </label>
        </div>
</form>

在我的servlet中,我正在尝试接收值:

List<FileItem> multiparts = new ServletFileUpload(
                        new DiskFileItemFactory()).parseRequest(req);
                boolean interestedInNewsFeed = Boolean.parseBoolean(multiparts.stream().filter((x) -> x.getFieldName().equals("news_feed")).
                        findFirst().get().getString());

但是,我得到了例外:

java.util.NoSuchElementException: No value present

我试图看到返回的字符串:

  1. 如果选中复选框,则返回空字符串。
  2. 如果未选中复选框,则抛出异常。
  3. 如何使用Apache-Commons-FileUpload库的FileItem类将复选框值解析为boolean而不会出现异常?

    我用Google搜索了这个问题,但找不到任何相关信息。

1 个答案:

答案 0 :(得分:1)

只有checked checkboxes是表单帖子的一部分。因此,最直接的解决方案是

boolean interestedInNewsFeed = multiparts.stream().filter((x) -> x.getFieldName().equals("news_feed"))
                .findAny().isPresent();