Как написать вложенное выражение SpEL в XML - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь использовать выражение SpEL, как показано ниже, но не работает.

<intercept-url pattern="/myurl" 
     access="#{'${perm.status}' == 'secured' ? 'T(XXX.YYY.PermissionsConstants).PERMISSION_NAME' : 
            'IS_AUTHENTICATED_ANONYMOUSLY'}"/>  

Если я заменим T(XXX.YYY.PermissionsConstants).PERMISSION_NAME на константу, такую ​​как VIEW_PERM, то это будет работать Все остальное работает нормально, кроме постоянной части. Я пробовал также с #{T(XXX.YYY.PermissionsConstants).PERMISSION_NAME}, но безуспешно.

Пожалуйста, предложите мне правильный синтаксис.

1 Ответ

1 голос
/ 06 марта 2020

Вы должны написать SpEL как #{expression}.

В вашем случае это должно быть похоже на

<intercept-url pattern="/myurl" 
     access="#{'${perm.status}' == 'secured' ? T(XXX.YYY.PermissionsConstants).PERMISSION_NAME : 
            'IS_AUTHENTICATED_ANONYMOUSLY'}"/>  

Не заключайте T(XXX.YYY.PermissionsConstants).PERMISSION_NAME в кавычки, в то время как '${perm.status}' или любой String необходимо заключить в кавычки.

Предположим, что вам нужно написать одно и то же выражение в классе java, тогда вы бы написали его следующим образом:

@Value("${perm.status}")
String permStatus;

// Inside a method
String expressionValue =  == permStatus == "secured" ? PermissionsConstants.PERMISSION_NAME : "IS_AUTHENTICATED_ANONYMOUSLY";

Аналогично, вам нужно написать его внутри #{} с некоторыми изменения:

  1. Заменить двойные кавычки одинарными кавычками

  2. Имя класса следует заменить на полное имя класса

  3. Завершите полное имя класса с T() перед доступом к любой константе из класса.

Надеюсь, это поможет!

...