使用 Apache FileItem 从复选框中获取布尔值的优雅方式
Elegant way to get boolean from checkbox using Apache FileItem
有复选框输入的表单:
<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
我试图查看返回的字符串:
- 如果选中复选框,则返回空字符串。
- 如果未选中复选框 - 将引发异常。
如何使用 Apache-Commons-FileUpload 库的 FileItem class 将复选框值解析为布尔值而不出现异常?
我用谷歌搜索了这个问题,但找不到任何相关信息。
只有 checked checkboxes 是表格 post 的一部分。因此,最直接的解决方案是
boolean interestedInNewsFeed = multiparts.stream().filter((x) -> x.getFieldName().equals("news_feed"))
.findAny().isPresent();
有复选框输入的表单:
<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
我试图查看返回的字符串:
- 如果选中复选框,则返回空字符串。
- 如果未选中复选框 - 将引发异常。
如何使用 Apache-Commons-FileUpload 库的 FileItem class 将复选框值解析为布尔值而不出现异常?
我用谷歌搜索了这个问题,但找不到任何相关信息。
只有 checked checkboxes 是表格 post 的一部分。因此,最直接的解决方案是
boolean interestedInNewsFeed = multiparts.stream().filter((x) -> x.getFieldName().equals("news_feed"))
.findAny().isPresent();