среда, 8 июня 2011 г.

подключение на страницу бина

Подключение бина к джееспе:
<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).

Когда в джеспе находится этот тег то выполняются следующие шаги:

  1. Пытается найти обьект в указанной области видимости по указанному имени.(instantiate from scope)
  2. Определят ссылку на этот обьект по имени.
  3. Если бин найден, то сохраняет на него ссылку в переменную. Если определен  type, то назначает бину этот тип.
  4. Если бин не найден, то создается его инстанция из указанного класса, и сохраняет на него ссылку в переменной. Если имя класса прeдствляет серилизированный шаблон, то инстанция бина создается  by java.beans.Beans.instantiate.
  5. Если бин был создан, а не найден в области видимости, и если у него есть теги в теле(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, который и определяет что в атрибуте толи класс, толи серилизированный шаблон. Если в бинНейме указано не имя класса, а выражение, то результат этого выражения должне быть именно именем класса. В атрибуте тип может находится либо, тот же самый класс, что и в биннейме, либо его суперкласс или интрфейс, что реализован классом и биннейма .

Комментариев нет:

Отправить комментарий