在我的Spring MVC项目中,我在JSP视图中从控制器获取一个布尔变量作为模型属性。基于布尔变量的值,我必须执行Js代码。所以我在比较if语句中的值。但它没有给我正确的输出:
代码是这样的:
在spring控制器中,布尔变量为:
boolean isAdmin;
由JSP视图接收,我可以按如下方式访问它:
$(isAdmin)
在我的JSP视图中,我的操作如下:
<script>
alert('${isAdmin}') // which gives the correct value .i.e : true / false
if('${isAdmin}'){
// some code
}
</script>
所以在上面的if语句中,如果isAdmin的值是 false ,那么如果阻塞它不应该执行,但它确实执行了,即使值 true 。< / p>
我还比较了布尔变量的值如下:
if('${isAdmin}' == true )
if('${isAdmin}' === true)
但这两者都不起作用。
所以纠正我在哪里做错了?什么是正确的比较方法?
答案 0 :(得分:3)
据我了解你的场景,你在服务器端(JSP)有一个布尔变量isAdmin
。你想在javascript代码中注入它,但它不起作用,因为你正在创建一个字符串文字而不是一个布尔字符:
if ('true') {
console.log('This always executes');
}
if('false') {
console.log('This always executes, too');
}
这是因为任何非空字符串都被视为&#34; truthy&#34;通过Javascript的值。删除引号,它将工作。
但为了清洁,我会将Javascript代码移动到自己的文件中,我将在HTML代码中创建一个隐藏字段来存储isAdmin
值:
<input id="isAdminFlag" type="hidden" value="${isAdmin}" />
if ($('isAdminFlag').val() == 'true') { ... }
答案 1 :(得分:2)
由于结果值是一个String并且您期望一个布尔值,因此应该根据布尔字符串值检查'${isAdmin}'
。正如有人评论的那样,它应该是'${isAdmin}' === 'true'
。
if('${isAdmin}' === 'true') {
// TODO
}
它始终执行的原因是Javascript真实化if表达式。例如,if("false")
是evalutes为true并执行
if("false"){
alert("What ??");
}
答案 2 :(得分:1)
为什么不使用没有引号的值?
if (${isAdmin}) {
答案 3 :(得分:0)
您渲染的js代码错误。渲染引擎应该把&#39; isAdmin&#39;的值。在js代码中,但实际上没有做。 你需要像这样添加你的脚本
<script>
<![CDATA[
var isTrueSet = ('${isAdmin}'=== 'true');
if(isTrueSet ){
// some code
}
]]>
</script>