Kotlin, Java, JSTL Boolean interop

У меня проблема с JSTL и Kotlin interop.

У меня есть этот класс kotlin с 2 котлинскими булевыми полями.

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: свойство [isBar2] не найдено по типу [packagedeclaration.foo]»

Я попытался установить поля как частные, но это не помогло. Java boolean как параметр кажется невозможным, потому что IntelliJ постоянно бомбит меня разными ошибками.

Вот мои мысли: JSTL пытается получить доступ к java getters / сеттерам с параметром java boolean и возвращаемым типом. Jstl ищет методы, названные с соглашениями об именах java, поэтому getBar1 и setBar1, но kotlin генерирует isBar1 и setBar1

Java-Kotlin interop для boolean является логическим в соответствии с этой страницей ссылки kotlin: ссылка Interpot Kotlin-Java

Вы не знаете, как избавиться от этой проблемы?

Вы можете использовать функцию класса данных Kotlin здесь,

Попробуйте ниже

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

В логических значениях EL будет искать isBar1() getter для выражения ${foo.bar1} . Вероятно, у вас проблема JSTL lib. Удалите все JSTL-библиотеки и определение тега lib в верхней части страницы. Просто попробуйте с помощью EL ${foo.bar1} проверить, правильно ли он вызывается или нет.