java.lang. Сравнение символов в EL - PullRequest
0 голосов
/ 03 февраля 2012

У меня есть свойство java.lang.Character bean, которое я хотел бы сравнить в EL, как показано ниже:

#{q.isMultiple eq 'Y'}

Он никогда не оценивает true.

Какэто вызвало и как я могу решить это?

Ответы [ 4 ]

2 голосов
/ 25 февраля 2012

В отличие от "простой Java", независимо от того, используете ли вы одинарные или двойные кавычки в EL, они представляют оба экземпляра java.lang.String. Ваш метод возвращает экземпляр java.lang.Character, поэтому он никогда не вернет true при вызове equals() между обоими экземплярами.

Решение состоит в том, чтобы изменить его на тип возврата String или boolean. Имя свойства isMultiple настоятельно рекомендует boolean. Вам нужно только удалить это is из имени свойства и сохранить его в методе получения.

private boolean multiple;

public boolean isMultiple() {
    return multiple;
}
#{q.multiple}

Альтернативой является использование enum. Это применимо только в том случае, если у вас более двух состояний (или, возможно, три, Boolean также включает null).

2 голосов
/ 09 октября 2012

Можно также сделать это, преобразовав Character в String, напечатав его как тело <c:set>, как показано ниже:

<c:set var="isMultipleVal">#{q.isMultiple}</c:set>

, а затем сравнив его вместо:

#{isMultipleVal eq 'Y'}
1 голос
/ 02 июня 2015

Если вы используете EL 2.2, один из обходных путей:

#{q.isMultiple.toString() eq 'Y'}
0 голосов
/ 03 февраля 2012

Вам может потребоваться посмотреть свойство isMultiple в классе переменной 'q'. Пожалуйста, проверьте ваш класс, имеющий метод получения с подписью как public char getIsMultiple(){}.

Кроме того, вы уверены, что ${q.isMultiple eq 'Y'} дает true?

...