Kotlin,Java,JSTL 布尔互操作
Kotlin, Java, JSTL Boolean interop
我遇到了 JSTL 和 Kotlin 互操作的问题。
我有一个带有 2 个 kotlin 布尔字段的特定 kotlin class。
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: Property [isBar2] not found on type [packagedeclaration.foo]"
我尝试将字段设置为私有,但没有帮助。
Java 布尔值作为参数似乎无法传递,因为 IntelliJ 不断地用不同的错误轰炸我。
这是我的想法:
JSTL 尝试使用 java 布尔参数和 return 类型访问 java getters/setters。
Jstl 寻找以 java 命名约定命名的方法,因此 getBar1 和 setBar1 但 kotlin 生成 isBar1 和 setBar1
Java - 根据这个 kotlin 参考页,布尔值的 Kotlin 互操作是布尔值:
Kotlin- Java interop reference
你知道如何解决这个问题吗?
您可以在此处使用 Kotlin 的 data class 功能,
试试下面
data class Foo(val isBar1:Boolean= false,val isBar2:Boolean= false)
在布尔值中,EL 也会寻找 isBar1()
getter 表达式 ${foo.bar1}
的方法。可能,您有 JSTL 库问题。请删除页面顶部的所有 JSTL 库和标记库定义。只需尝试使用 EL ${foo.bar1}
来检查它是否被正确调用。
我遇到了 JSTL 和 Kotlin 互操作的问题。
我有一个带有 2 个 kotlin 布尔字段的特定 kotlin class。
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: Property [isBar2] not found on type [packagedeclaration.foo]"
我尝试将字段设置为私有,但没有帮助。 Java 布尔值作为参数似乎无法传递,因为 IntelliJ 不断地用不同的错误轰炸我。
这是我的想法: JSTL 尝试使用 java 布尔参数和 return 类型访问 java getters/setters。 Jstl 寻找以 java 命名约定命名的方法,因此 getBar1 和 setBar1 但 kotlin 生成 isBar1 和 setBar1
Java - 根据这个 kotlin 参考页,布尔值的 Kotlin 互操作是布尔值: Kotlin- Java interop reference
你知道如何解决这个问题吗?
您可以在此处使用 Kotlin 的 data class 功能,
试试下面
data class Foo(val isBar1:Boolean= false,val isBar2:Boolean= false)
在布尔值中,EL 也会寻找 isBar1()
getter 表达式 ${foo.bar1}
的方法。可能,您有 JSTL 库问题。请删除页面顶部的所有 JSTL 库和标记库定义。只需尝试使用 EL ${foo.bar1}
来检查它是否被正确调用。