【问题标题】:Elegant way to get boolean from checkbox using Apache FileItem使用 Apache FileItem 从复选框获取布尔值的优雅方式
【发布时间】:2018-06-11 12:27:00
【问题描述】:

有复选框输入的表单:

<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. 如果未选中复选框 - 将引发异常。

如何使用 Apache-Commons-FileUpload 库的 FileItem 类将复选框值解析为布尔值而不出现异常?

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!我的 IDE 还建议使用更短的方法:multiparts.stream().anyMatch((x) -&gt; x.getFieldName().equals("news_feed"));
    猜你喜欢
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    • 2011-04-08
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    相关资源
    最近更新 更多