Какая разница между # {} ${} и% {}?

В настоящее время я работаю с struts2, и я просто не понимаю, что разница между ${var}, #{var} и %{var} являются ли они разными областями? что они?

Я нашел пример #:

<s:select label="Year"
      id="%{param.name}"
      list="#{'2010':'2010','2011':'2011','2012':'2012','2013':'2013','2014':'2014', '2015':'2015'}"
      value="%{currentYear}"
      required="true"
/>

здесь он выглядит как ассоциативный массив, но в других случаях я видел его как #var (без скобок) какие-либо идеи?

Ответы

Ответ 1

  • ${} - стандартная запись JSP EL.
  • #{} - стандартная нотация UEL; никогда не использовал его, может работать.
  • %{} - обозначение выражения OGNL.

JSP EL-нотация работает, потому что есть оболочка запроса, которая сначала переносит на стек значений для поиска, а затем возвращается к нормальной оценке JSP, если в стеке значений нет значения.

Обозначение выражения OGNL допустимо только в тегах S2. IMO он должен использоваться всякий раз, когда вы оцениваете выражение OGNL, хотя это довольно часто необязательно. Однако, если это необязательно, это, скорее, дерьмовая стрельба. Это часто, buuuut не всегда. Лучше всего использовать его и быть явным и коммуникативным.

Возможно, вы спрашиваете о переменных #, таких как #session и т.д. # используется для разрешения значения в стеке значений, которое находится в разделе "карта". Я рассматриваю стек значений как стек комбинации и область действия: если объект был нажат на стек, вам не нужен #. Если значение было создано, вам понадобится #.

Например, если вы используете <s:set> для создания переменной, вы должны получить к ней доступ с помощью префикса #, например:

<s:set var="foo" value="'plugh'"/>
<s:property value="#foo"/>

Ответ 2

Просто еще одно примечание:

Вы можете использовать $ в действии, чтобы попросить struts оценить ваши параметры против OGNL, прежде чем передавать его другим методам, например:

Использование настраиваемого валидатора

Struts 2 - повторное использование функции проверки пользовательских выражений

ИЛИ

Изменить имя файла загрузки

Struts 2 Загрузить - Как настроить имя файла динамически?