我正在尝试从HTML帖子获取复选框值。我的问题是帖子返回on or null
而不是true or false
,因此我需要将其转换为true以将其插入数据库中。
Boolean hasProfile7 = Boolean.valueOf(request.getParameter("hasProfile7"))
hasProfile7即使在“on”
时也是假的 Boolean hasProfile7 = (request.getParameter("hasProfile7").equals("on")) ? true : false;
如果没有选中复选框(false)
,这会导致我的应用程序崩溃java.lang.NullPointerException
Boolean hasProfile7 = (request.getParameter("hasProfile7") == "on") ? true : false;
这让我总是假的。
我该怎么办?我只是希望bool在“on”时为True,在“null”时为false
答案 0 :(得分:3)
这是将常量与String进行比较的空安全方法:
"some-value".equals(variable) // ok
如果variable
为空,则以下代码段将抛出空指针异常,因为您不允许在空值上调用equals
方法:
variable.equals("some-value") // not recomended
如果值包含" on"此方法将返回true,否则将返回false:
public boolean isChecked(final String value) {
if (Objects.isNull(value)) {
return false;
}
if ("on".equals(value.toLowerCase())) {
return true;
}
return false;
}
答案 1 :(得分:1)
第一点
Boolean hasProfile7 = Boolean.valueOf(request.getParameter("hasProfile7"))
你在做什么
Boolean.valueOf(<A String>)
根据https://docs.oracle.com/javase/7/docs/api/java/lang/Boolean.html#valueOf(java.lang.String)
public static Boolean valueOf(String s)
“返回一个带有由指定字符串表示的值的布尔值。返回的布尔值表示如果字符串参数不为null且等于忽略大小写,则表示字符串”true“的真值。”
第二点
Boolean hasProfile7 = (request.getParameter("hasProfile7").equals("on")) ? true : false;
在这里你很接近要做的事情。您的问题是request.getParameter("hasProfile7")
返回 null ,因此您拥有*null*.equals("on")
,这就是您获得NPE的原因。
如果您有预定义的字符串,请始终将其放在左侧大小:
Boolean hasProfile7 = ("on".equals(request.getParameter("hasProfile7"))) ? true : false;
在这里,即使request.getParameter("hasProfile7")
为空,您也有任何异常,它只会返回 false
第三点
Boolean hasProfile7 = (request.getParameter("hasProfile7") == "on") ? true : false;
您要将对象"on"
与对象request.getParameter("hasProfile7")
进行比较。如果值相同,则对象不是。
最后一点,为什么要使用三元表达式(request.getParameter("hasProfile7").equals("on")) ? true : false;
可以翻译成
if true --> true
if false --> false
你可以写
Boolean hasProfile7 = "on".equals(request.getParameter("hasProfile7"))