首页 文章

Kotlin,Java,JSTL布尔互操作

提问于
浏览
0

我有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 回答

  • 0

    在布尔值中,EL也会为表达式 ${foo.bar1} 寻找 isBar1() getter方法 . 可能你有JSTL lib问题 . 请删除页面顶部的所有JSTL库和标签库定义 . 只需尝试使用EL ${foo.bar1} 来检查它是否正确调用 .

  • 1

    你可以在这里使用Kotlin的 data class 功能,

    试试以下

    data class Foo(val isBar1:Boolean= false,val isBar2:Boolean= false)
    

相关问题