Проекция весенней коллекции SPEL - PullRequest
0 голосов
/ 05 августа 2020

Простой вопрос о выборе коллекции SPEL.

См. Раздел 10.5.17 Выбор коллекции на этой странице https://docs.spring.io/spring/docs/4.3.10.RELEASE/spring-framework-reference/html/expressions.html

List<Inventor> list = (List<Inventor>) parser.parseExpression(
        "Members.?[Nationality == 'Serbian']").getValue(societyContext);

Мне нужно выбор «сербский» должен исходить извне, а не быть фиксированной жестко закодированной строкой.

Просто в качестве аргумента учтите, что мы могли бы получить его как « selectedNationality » из того же класса общества с той же страницы по ссылке.

Модифицированный класс с selectedNationality

public class Society {
    private String name;
    public static String Advisors = "advisors";
    public static String President = "president";
    private List<Inventor> members = new ArrayList<Inventor>();
    private Map officers = new HashMap();
// new selector field
    private String selectedNationality;
......
 }

New Selection

Новый выбор SPEL будет выглядеть следующим образом:

List<Inventor> list = (List<Inventor>) parser.parseExpression(
        "Members.?[Nationality == selectedNationality]").getValue(societyContext);

Когда мы пытаемся сделать ошибку, то "selectedNationality" не является частью объекта Member.

Означает ли это, что для выбора коллекции в языке выражений Spring нам понадобится жестко закодированная строка? Если да, то кто-нибудь знает, почему?

1 Ответ

0 голосов
/ 05 августа 2020

Узнал, как это сделать. Таким образом, способ - использовать переменные, см. 10.5.11 Переменные @ [https://docs.spring.io/spring/docs/4.3.10.RELEASE/spring-framework-reference/html/expressions.html] [1]

Установить переменную

Итак, в нашем случае мы сделаем этот набор переменная:

Inventor tesla = new Inventor("Nikola Tesla", "Serbian");
StandardEvaluationContext context = new StandardEvaluationContext(tesla);
context.setVariable("selectedNationality ", "Serbian");

Новый выбор

Новый выбор SPEL будет выглядеть следующим образом: # selectedNationality

List<Inventor> list = (List<Inventor>) parser.parseExpression(
        "Members.?[Nationality == #selectedNationality]").getValue(societyContext);

Работает как шарм!

...