Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

...

Блок кода
languagejava
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();
    }
}
  1. Данный контроллер будет существовать, пока открыта страница, которая его использует, т.к. у него указана аннотация @ViewScoped (javax.faces.view.ViewScoped). Когда абонент перейдет на другой пункт меню и обратно или нажмет F5 - будет создан новый объект данного контроллера. Если указать вместо @ViewScoped аннотацию @SessionScoped (javax.enterprise.context.SessionScoped), тогда контроллер будет существовать в течении жизни HTTP-сессии. Если же указать @RequestScoped (javax.enterprise.context.RequestScoped) - то только на протяжении обработки HTTP-запроса. Создание контроллера происходит при первом его использовании, например, в файле xhtml.
  2. Аннотация @BGInject позволяет использовать веб-сервисы биллинга (но дополнительно требуется аннотация @BGInjection на классе).
  3. Обычно для инициализации контроллера создают метод init с аннотацией @PostConstruct, однако в данном случае используем внутренний класс AbstractBean, который уже задействовал этот механизм, поэтому необходимо переопределить его метод init.
  4. Метод populate заполняет контроллер данными, он вызывается при инициализации из метода init, но также может быть вызван и из xhtml.
  5. Метод getContractNotificationList используется для получения списка объектов для последующего отображения в xhtml #{myNotificationBean.contractNotificationList}.
  6. Метод markRead вызывает веб-сервис биллинга, а затем вызывает populate для обновления данных.

...