JSF: ManagedBean, хорошее место для работы с бизнес-логикой?

Я имею managedBean за fileUploadПосле того, как файл загружен, мне нужно вызвать разные парсеры в зависимости от того, какое значение выбрано из выпадающего списка парсера, а затем в парсере создаю объект DetailsClass куда звоню getDetails метод для этого конкретного класса, следует отметить, что ни parserClass ни DetailsClass зарегистрирован в лица-config.xml, мой вопрос здесь

  • Если я хочу сохранить информацию сеанса из FileUpload класс для Parser класс для DetailsClass тогда я должен определить это в faces-config.xml но как следует parser класс и DetailsClass быть определено, должно ли оно быть определено как managedBean или как что-то еще?

Вот код:

В моем классе managedBean у меня есть две функции, fileUpload а также callParser как показано:

 public void uploadFile(FileEntryEvent event)
{
    FacesContext ctx = FacesContext.getCurrentInstance();
    //Setting getSession to false, container will not create new session if session is not present and return null
    HttpSession session = (HttpSession) ctx.getExternalContext().getSession(false);
    setSession(session);

    resultBean = new ResultBean();
    FileEntry fileEntry = (FileEntry) event.getSource();
    FileEntryResults results = fileEntry.getResults();
    FileEntry fe = (FileEntry) event.getComponent();

    FacesMessage msg = new FacesMessage();
    for (FileEntryResults.FileInfo fileInfo : results.getFiles())
    {
        if (fileInfo.isSaved())
        {
            File file = fileInfo.getFile();
            String filePath = file.getAbsolutePath();
            callParser(selectedItem, filePath);
        }
        resultBeanList.add(resultBean);
    }
}

private void callParser(String parserType, String filePath)
{
    if ("Delta".equals(parserType))
    {
        PositionParserDelta deltaParser = new PositionParserDelta();
        deltaParser.getQuotes(filePath);
    }
    else if ("Gamma".equals(parserType))
    {
        PositionParserGamma gammaParser = new PositionParserGamma();
        gammaParser.getQuotes(filePath);
    }
}

Теперь, скажем, мы рассмотрим Delta Parserтак что в этом классе у меня есть что-то вроде:

public class PositionParserDelta extends Base
{
    List<String[]> dataList = new ArrayList<String[]>();
    ContractManager contractManager = new ContractManager();

    public PositionParserDelta()
    {
    }

    public void getQuotes(String fileName)
    {
        try
        {
            Map<String, ContractSeries> gsLookup = contractManager.getContractsMap(ContractManager.VendorQuotes.KRT);
            CSVReader reader = new CSVReader(new FileReader(fileName), '\t');
            String[] header = reader.readNext();
            dataList = reader.readAll();
            List<Trade> tradeBeanList = new ArrayList<Trade>();
            for (String[] data : dataList)
            {
                //Some Business Logic
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

мой contractManager Класс выглядит как

    public class ContractManager extends Base
    {
        private List<Series> List = new ArrayList<Series>();
        private ContractSeries[] SeriesList = new Series[3];
        private ListingOps listingOps;

//This line throws error as faces class not found and it makes sense because am not registering this with faces-config.xml
        HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);

        public List<ContractSeries> getContracts(long orgId, HttpSession session)
        {
            log.info("Inside getContracts method call");
            if (false)
            {
                //Some Logic
            }
            else
            {
                try
                {
                    //Set session and get initialContext to retrieve contractSeries data from ejb calls
                    log.info("Trying to get allContractSeries data from listingOpsBean");
                    Series[] allSeries = deltaOps.findAllSeries(true);
                    Collections.addAll(contractList, allContractSeries);
                }
                catch (Exception ex)
                {

                }
            }
            return contractList;
        }

        public Map<String, ContractSeries> getContractsMap(VendorQuotes vendorQuotes)
        { //Some Logic
    }

Но в файле face-config.xml,

 <managed-bean>
        <managed-bean-name>fileUpload</managed-bean-name>
        <managed-bean-class>trade.UploadBlotterBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

Так что в основном мой вопрос,

если предположить, я звоню другим классам из managedBean тогда как они должны быть определены в faces-config.xml и так как я новичок в JSFвызывает другие классы из managedBean а наличие бизнес-логики в этих классах считается хорошей практикой?

Также мне нужно убедиться, что я поддерживаю сеанс, который я получаю в UploadFile через Parser а также ContractMapping учебный класс.

Также,

Все ли "зарегистрировано" как управляемый компонент в Face-Config?

1 ответ

Решение

Не уверен, но я думаю, что каждый боб зарегистрирован как <managed-bean> в faces-config, По конкретной роли, которую играет класс, их можно разделить на

  1. Model Managed-Bean

  2. Бэк-бин

  3. Контроллер Управляемый Бин

  4. Поддержка Managed-Bean

  5. Утилита Managed-Bean...

Дав им соответствующее имя, вы можете различить их в faces-config, Согласно работе, которую обслуживает боб, поставьте там прицелы.

Другие вопросы по тегам