Я работаю с Struts2, и когда я получаю доступ к переменным стека значений, я не знаю, использовать ли %
или #
или $
. Я стараюсь их всех, пока не найду правильный.
Может ли кто-нибудь объяснить, в чем разница между ними?
Я работаю с Struts2, и когда я получаю доступ к переменным стека значений, я не знаю, использовать ли %
или #
или $
. Я стараюсь их всех, пока не найду правильный.
Может ли кто-нибудь объяснить, в чем разница между ними?
Использование # (знак фунта)
OGNL используется для ссылки на объекты в ActionContext следующим образом:
objectName
: объект в ValueStack (объект по умолчанию/корневой объект в контексте OGNL), например свойство Action#objectName
: объект в ActionContext, но за пределами ValueStack, в частности...
#objectName
: объект ActionContext, созданный с использованием тегов данных Struts2 с областью действия по умолчанию (например, <s:set name="foo" value="'Testing'" />
, ссылка на <s:property value="#foo" />
)#parameters.objectName
: параметр запроса#request.objectName
: атрибут с областью запроса#session.objectName
: атрибут, ограниченный сеансом#application.objectName
: атрибут области приложения#attr.objectName
: атрибут в странице, запросе, сеансе или области приложения (поиск в этом порядке)Приведенные выше ссылки на областную карту (параметры, запрос, сеанс и приложение) могут быть сделаны одним из двух способов:
#scopeName.objectName
или#scopeName['objectName']
Использование% (знак процента)
%{ OGNL expression }
используется для принудительной оценки OGNL атрибута, который обычно интерпретируется как строковый литерал.
Пример: <s:property value="myProperty" default="%{myDynamicDefaultValue}" />
Использование знака @(при знаке)
Символ @используется для ссылок на статические свойства и методы. Обратите внимание, что вам может потребоваться включить это в свойствах Struts2: struts.ognl.allowStaticMethodAccess=true
Примеры:
@[email protected]_STATIC_PROPERTY
@[email protected]
Использование знака $(знак доллара)
Struts2 OGNL особо не использует знак доллара. Однако его можно использовать для оценки нормальных выражений JSTL. Например:
Struts2: <h1><s:property value="#pageTitle" /></h1>
(эквивалентно...)
JSTL: <h1>${pageTitle}</h1>
В основе фреймворка используется стандартный контекст именования для оценки выражений OGNL. Объектом верхнего уровня, использующим OGNL, является Карта (обычно называемая контекстной картой или контекстом). В OGNL есть понятие о том, что в контексте существует корневой (или по умолчанию) объект. В выражении свойства корневого объекта можно ссылаться без какого-либо специального понятия "маркер". Ссылки на другие объекты отмечены значком фунта (#).
Структура устанавливает контекст OGNL как наш ActionContext, а стек значений - корневым объектом OGNL. (Столбец значений представляет собой набор из нескольких объектов, но для OGNL он представляет собой единственный объект.) Наряду со стеком значений структура размещает другие объекты в ActionContext, включая Карты, представляющие контексты приложения, сеанса и запроса. Эти объекты сосуществуют в ActionContext вместе со стеком значений (наш корень OGNL).
|
|--application
|
|--session
context map---|
|--value stack(root)
|
|--request
|
|--parameters
|
|--attr (searches page, request, session, then application scopes)
см. это для более подробной информации
в основном struts2 поместить значение объекта Stack как самый верхний объект и OGNL используется для ссылки на объект them.root можно ссылаться без какого-либо специального "маркера" или с помощью %
, тогда как ссылки на другие объекты отмечены знаком фунта (#). # в основном используется для обозначения объектов/значений из приложения/сеанса и т.д.
Просто для завершения @Devon Biere...
Использование знака $(знак доллара)
Вы также можете использовать ${}
в своих файлах ресурсов. Строки автоматически используют OGNL для разбора ${}
. Например
sample.foo.bar=This is some ${someProperty} //If the someProperty is in valueStack
sample.welcome.message=Welcome dear ${#session.CurrentUser.farsiFirstName}
Обратите внимание, что знак $
здесь - это просто триггер, который запрашивает struts для оценки строки в OGNL, пожалуйста, не путайте ее с ${}
в JSTL