...
Блок кода | ||
---|---|---|
| ||
import java.io.Serializable; import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.enterprise.context.SessionScoped; import javax.faces.view.ViewScoped; import javax.inject.Inject; import javax.inject.Named; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.bitel.mybgbilling.kernel.common.AbstractBean; import ru.bitel.mybgbilling.kernel.common.inject.BGInject; import ru.bitel.mybgbilling.kernel.common.inject.BGInjection; import ru.bitel.mybgbilling.kernel.contract.NotificationBean; import ru.bitel.bgbilling.common.BGException; import ru.bitel.bgbilling.kernel.contract.api.common.bean.ContractNotification; import ru.bitel.bgbilling.kernel.contract.api.common.service.ContractNotificationService; @Named @ViewScoped // 1. @BGInjection // 2. public class MyNotificationBean extends AbstractBean implements Serializable { private static final Logger logger = LoggerFactory.getLogger( MyTestBean2MyNotificationBean.class ); @BGInject // 2. private ContractNotificationService contractNotificationService; private List<ContractNotification> contractNotificationList; @Override protected void init() // 3. throws BGException { logger.info( "init" ); populate(); } public void populate() // 4. { logger.info( "populate" ); contractNotificationList = contractNotificationService.contractNotificationList( getContractId() ); } public List<ContractNotification> getContractNotificationList() // 5. { return contractNotificationList; } public void markRead( int id ) // 6. throws BGException { contractNotificationService.contractNotificationMarkRead( getContractId(), id ); populate(); } public void deleteContractNotification( int id ) throws BGException { contractNotificationService.contractNotificationDelete( getContractId(), id ); populate(); } } |
- Данный контроллер будет существовать, пока открыта страница, которая его использует, т.к. у него указана аннотация @ViewScoped (javax.faces.view.ViewScoped). Когда абонент перейдет на другой пункт меню и обратно или нажмет F5 - будет создан новый объект данного контроллера. Если указать вместо @ViewScoped аннотацию @SessionScoped (javax.enterprise.context.SessionScoped), тогда контроллер будет существовать в течении жизни HTTP-сессии. Если же указать @RequestScoped (javax.enterprise.context.RequestScoped) - то только на протяжении обработки HTTP-запроса. Создание контроллера происходит при первом его использовании, например, в файле xhtml.
- Аннотация @BGInject позволяет использовать веб-сервисы биллинга (но дополнительно требуется аннотация @BGInjection на классе).
- Обычно для инициализации контроллера создают метод init с аннотацией @PostConstruct, однако в данном случае используем внутренний класс AbstractBean, который уже задействовал этот механизм, поэтому необходимо переопределить его метод init.
- Метод populate заполняет контроллер данными, он вызывается при инициализации из метода init, но также может быть вызван и из xhtml.
- Метод getContractNotificationList используется для получения списка объектов для последующего отображения в xhtml #{myNotificationBean.contractNotificationList}.
- Метод markRead вызывает веб-сервис биллинга, а затем вызывает populate для обновления данных.
...