我有JSTL和Kotlin互操作的问题 .
我有一个特殊的kotlin类,有2个kotlin布尔字段 .
class Foo {
var isBar1 : Boolean = false
var isBar2 : Boolean = false
constructor()
constructor(isBar1: Boolean, isBar2: Boolean) {
this.isBar1 = isBar1
this.isBar2 = isBar2
}
}
我必须从jsp访问这两个字段,我正在通过以下方式进行:
<c:choose>
<c:when test="${foo.isBar1== true}">
<p>Print something</p>
</c:when>
<c:when test="${foo.isBar1== false}">
<p>Print something else</p>
</c:when>
</c:choose>
和isBar2完全相同
问题是,当我运行这段代码时,我遇到了
java.lang.NoSuchMethodError:packagedeclaration.setBar1(Ljava / lang / Boolean;)V
如果我尝试编写以下功能:
fun getBar1(): Boolean {
return this.isBar1
}
fun setBar1(isBar1: Boolean): Any {
this.isBar1= isActive
return Any()
}
fun getBar2(): Boolean {
return this.isBar2
}
fun setBar2(isBar2: Boolean): Any {
this.isBar2= isBar2
return Any()
}
我需要“javax.el.PropertyNotFoundException:在类型[packagedeclaration.foo]上找不到Property [isBar2]”
我试图将字段设置为私有,但它没有帮助 . Java boolean as参数似乎无法通过,因为IntelliJ不断地用不同的错误轰炸我 .
这是我的想法:JSTL尝试使用java boolean参数和返回类型访问java getter / setter . Jstl寻找用java命名约定命名的方法,所以getBar1和setBar1但kotlin生成isBar1和setBar1
Java - 根据此kotlin参考页面,布尔值的Kotlin interop是布尔值:Kotlin- Java interop reference
你知道如何摆脱这个问题吗?
2 回答
在布尔值中,EL也会为表达式
${foo.bar1}
寻找isBar1()
getter方法 . 可能你有JSTL lib问题 . 请删除页面顶部的所有JSTL库和标签库定义 . 只需尝试使用EL${foo.bar1}
来检查它是否正确调用 .你可以在这里使用Kotlin的 data class 功能,
试试以下