Подключение бина к джееспе:
Этот тег пытается получить ссылку на существующий тег(locale), или создать инстанцию из указанного класса или шаблона(instatiate).
Когда в джеспе находится этот тег то выполняются следующие шаги:
Первый сетпроперти будет вызываться каждый раз когда мы обращаеся к странице. А вот второй только при первом вызове страницы и то если бин был создан, а не найден в области памяти.<jsp:useBean
id="beanInstanceName"
scope="page|request|session|application"
{ class="package.class" |
type="package.class" |
class="package.class" type="package.class" |
beanName="{ package.class | <%= expression %> }" type="package.class"
}
{ /> |
> other tags </jsp:useBean>
} Этот тег пытается получить ссылку на существующий тег(locale), или создать инстанцию из указанного класса или шаблона(instatiate).
Когда в джеспе находится этот тег то выполняются следующие шаги:
- Пытается найти обьект в указанной области видимости по указанному имени.(instantiate from scope)
- Определят ссылку на этот обьект по имени.
- Если бин найден, то сохраняет на него ссылку в переменную. Если определен
type, то назначает бину этот тип. - Если бин не найден, то создается его инстанция из указанного класса, и сохраняет на него ссылку в переменной. Если имя класса прeдствляет серилизированный шаблон, то инстанция бина создается by
java.beans.Beans.instantiate. - Если бин был создан, а не найден в области видимости, и если у него есть теги в теле(between
and), то выполняются эти теги.
<jsp:useBean id="cart" scope="session" class="session.Carts" /> <jsp:setProperty name="cart" property="*" /> <jsp:useBean id="checking" scope="session" class="bank.Checking" > <jsp:setProperty name="checking" property="balance" value="0.0" /> </jsp:useBean>
Разберем опциоанальные варианты указанные в схеме в начале заметки.
- Только один атрибут class="package.class". Это означает, инстанция в случае не находждения ее в контексте будет созданна из этого класса.
- Только один атрибуте type="package.class". Это означает, что инстанции, которая была найдена в контексте будет определен указанный тип(с ней будет обращаться приложение как с обьектом указанного класса)
- Оба атрибута class="package.class" type="package.class". Это применимо в случает когда нужно создать инстанцию из одного класса, а приложение должно с ним обращаться как с обьектом класса из type. Такое возможно когда класс из атрибута class наследник любого уровня иерархии класса из type.
- beanName="{ package.class | <%= expression %> }" type="package.class". В этом случае обьект либо создается из класса либо из серилизированного шаблона. И ему присваивается тип указанный в атрибуте типа. Все это делается методом
java.beans.Beans.instantiate, который и определяет что в атрибуте толи класс, толи серилизированный шаблон. Если в бинНейме указано не имя класса, а выражение, то результат этого выражения должне быть именно именем класса. В атрибуте тип может находится либо, тот же самый класс, что и в биннейме, либо его суперкласс или интрфейс, что реализован классом и биннейма .
Комментариев нет:
Отправить комментарий