Язык выражения не может найти мою собственность [дубликат]

Не похоже, что есть официальный способ сделать это прямо сейчас. Существует открытый запрос функции для добавления возможности для извлечения областей tmLanguage в позиции здесь: # 580

Существует одно потенциальное обходное решение, которое требует добавления зависимости к scope-info . Это расширение предоставляет собственный API, который может использовать другое расширение. Вот пример кода , отправленный автором в связанной проблеме:

import * as api from 'scope-info'
async function example(doc : vscode.TextDocument, pos: vscode.Position) {
    const siExt = vscode.extensions.getExtension('siegebell.scope-info');
    const si = await siExt.activate();
    const t1 : api.Token = si.getScopeAt(doc, pos);
}

17
задан ROMANIA_engineer 26 January 2016 в 13:12
поделиться

5 ответов

javax.el.PropertyNotFoundException: свойство 'foo' не найдено в типе com.example.Bean

Это буквально означает, что упомянутый класс com.example.Bean не имеет общедоступный (нестатический!) метод getter для указанного свойства foo. Обратите внимание, что само поле здесь не имеет значения!

Имя открытого метода getter должно начинаться с get, за которым следует имя свойства, которое имеет заглавные буквы только в первой букве имени свойства, как в Foo .

public Foo getFoo() {
    return foo;
}

Таким образом, вам необходимо убедиться, что существует метод получения, точно соответствующий имени свойства, и что метод public (не static) и что метод не принимать любые аргументы и возвращать не void. Если у вас есть один, и он по-прежнему не работает, то есть вероятность, что вы были заняты редактированием кода вперед и назад без прочной очистки сборки, восстановления кода и повторного развертывания / перезапуска приложения. Вы должны убедиться, что вы это сделали.

Для свойств boolean (не Boolean!) Имя метода getter должно начинаться с is вместо get.

public boolean isFoo() {
    return foo;
}

Независимо от типа, наличие самого поля foo, таким образом, не имеет значения. Он может иметь другое имя или быть полностью отсутствующим или даже быть static. Все ниже должно быть доступно ${bean.foo}.

public Foo getFoo() {
    return bar;
}

public Foo getFoo() {
    return new Foo("foo");
}

public Foo getFoo() {
    return FOO_CONSTANT;
}

Понимаете, это не то, что подсчет, но сам метод геттера. Обратите внимание, что само имя свойства не должно быть капитализировано в EL. Другими словами, ${bean.Foo} никогда не будет работать, это должно быть ${bean.foo}.

См. Также:

54
ответ дан Community 21 August 2018 в 12:58
поделиться
  • 1
    Хорошо, но есть одна небольшая проблема. Мой запрос связан с левым запросом. Ответная переменная находится в таблице i mysql, которая соединена. – Ilkar 20 December 2011 в 17:28
  • 2
    Это не имеет ничего общего с HQL. Это связано с вашей моделью (класс javabean). В классе com.pool.app.domain.Pool такого метода нет. Вы должны убедиться, что он имеет этот метод или убедиться, что вы ссылаетесь на правильное имя свойства в EL. – BalusC 20 December 2011 в 17:42
  • 3
    хорошо, так что с самого начала - у меня есть две таблицы в моей mysql. Эти таблицы сопоставляются с POJO-файлами. Одна таблица - Pool, а вторая - PoolQuestion. В пуле POJO нет getAnswer, потому что «ответ» находится в таблице PoolQuestion, и он отображается в PoolQuestion. Таким образом, im делает запрос, основанный на Pool.java (без getAnswer), и левый соединяет PoolQuestion.java (есть getAnswer). Я отправляю ответ на контроллер на основе Pool.java, а затем на представление, так как я понимаю, что не может быть «getAnswer», потому что в пуле POJO нет ответа. Но что теперь делать ... – Ilkar 20 December 2011 в 17:53
  • 4
    Ну, а затем добавьте класс getPoolQuestion() в Pool и используйте ${pool.poolQuestion.answer}, как в вашем сообщении об ошибке? Тем не менее, я предлагаю пройти через базовый учебник / книгу и поместить все концепции отдельно, а не рассматривать это как одну вещь. Проблема дизайна модели в свою очередь не связана с JSP / JSTL / EL. – BalusC 20 December 2011 в 17:55
  • 5
    По прошествии слишком большого времени, глядя на это, я искал его и запустил это. Очень полезно ... Однако кажется довольно своеобразным способом установить это ... – Francky_V 1 December 2017 в 03:27

Я считаю, что идентификаторы доступа не соответствуют соглашениям об именах бинов, и поэтому исключение выбрано. Они должны быть следующими:

public Integer getId() { return id; }    
public void setId(Integer i){ id= i; }
5
ответ дан bummi 21 August 2018 в 12:58
поделиться

Я столкнулся с аналогичным типом проблемы: Code Snippet:

<c:forEach items="${orderList}" var="xx"> ${xx.id} <br>
</c:forEach>

После списка заказов было следующее: «$ {orderList}», из-за чего переменная xx скрывалась в String и не могла вызвать xx.id.

Поэтому убедитесь, что в пространстве. Иногда они играют решающую роль. : Р

-2
ответ дан Rajat 21 August 2018 в 12:58
поделиться
  • 1
    Это не отвечает на вопрос, где явно нет такого лишнего пространства. – trincot 3 February 2018 в 23:55

EL интерпретирует ${class.name} как описано - имя становится getName () в предположении, что вы используете явные или неявные методы генерации getter / seters

. Вы можете переопределить это поведение, явно указав имя как функция: ${class.name()} Это вызывает имя функции () напрямую без изменений.

0
ответ дан sdw 21 August 2018 в 12:58
поделиться
-1
ответ дан DOM67 1 November 2018 в 07:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: