当前位置: 首页 > 面试题库 >

JSF:ManagedBean,处理业务逻辑的好地方吗?

裴弘
2023-03-14
问题内容

我已经managedBeanfileUpload,一旦文件被上传,然后我需要调用基于从解析器下拉列表中选择什么样的价值不同的解析器,然后解析器正在创建的对象DetailsClass,其中我打电话getDetails的那个特定的类方法,这里要注意的一点是,既不parserClass也不DetailsClass是在faces-
config.xml中注册的,我的问题是

  • 如果我想维护从一个FileUpload班级到另一个班级的会话信息ParserDetailsClass那么我应该在其中定义它,faces-config.xml但是应该如何定义parserDetailsClass定义类,应该将它定义为managedBean其他名称还是其他名称?

这是代码:

在我managedBean类我有两个功能fileUploadcallParser如图所示:

 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
    }

但是在faces-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跨越ParserContractMapping类。

也,

是否所有东西都被“注册”为faces-config中的managed-bean?


问题答案:

不知道,但我想每个bean被注册为<managed-bean>faces-config。在扮演特定角色时,可以将其分类为

  1. Model Managed-Bean

  2. 支持Managed-Bean

  3. 控制器托管豆

  4. 支持托管豆

  5. 实用程序托管Bean …

通过给它们适当的名称,您可以在中区分它们faces-config。根据bean服务的工作,在其中设置作用域。



 类似资料:
  • 我目前刚接触Spring integration。 基本上尝试使用Java Spring integration DSL异步轮询多个文件位置。我需要获取文件名,并使用文件名执行一些操作,最后将文件推送到S3,我的问题是这些使用文件执行操作的任务是否可以在任务执行器或服务激活器处理程序中执行。我不确定哪个地方是对的。 我在这里附上了示例代码。 还有一种方法可以检索通道中文件的文件名,因为我需要将它作

  • 综述 在多功能的动态web应用程序中测试业务逻辑漏洞需要用非常规手段来思考。如果应用认证机制原先以1、2、3的步骤依次执行的验证身份目的来开发,万一用户从步骤1直接跳到步骤3会发生什么?用更加简单的例子来说,在打开失败、权限拒绝或仅仅500的错误的情况下,应用程序是否依然能够提供访问权限? 可以举出许多例子,但是不变的思想是“跳出常规思维”。这种类型的漏洞无法被漏洞扫描工具探测到,依赖于渗透测试人

  • 1.1  概述 业务逻辑模块主要用于编写业务逻辑,一般包含三个子模块:action(定义action和procedure)、code(业务逻辑的实现,一般使用java实现,有src,dsrc,lib)、fn(函数定义)。 1.2  Action定义 语法: <action name=" n" global="true" log-enabled="true" procedure=" "> <参

  • 因此,每个功能区显然都在数据库中,但它们还需要一些逻辑来确定用户何时获得了功能区。 按照我的编码方式,是一个简单的接口: 是一个抽象类,它实现了接口,避免了方法的定义: 现在,将像这样实现一个特定的功能区: 这段代码工作得很好,表是按照我期望的方式在数据库中创建的(我在本地环境中使用DDL生成)。 问题是,在域对象中编写业务逻辑感觉是错误的。这是好的练习吗?你能提出一个更好的解决方案吗?此外,我不

  • 问题内容: 我认为人们普遍认为,作为Java(以及可能带有异常处理的任何语言)中的一条通用规则,应尽量避免使用异常处理来实际处理业务逻辑。通常,如果预期会发生某种情况,则应该检查并更直接地处理它,而不是依靠异常处理为您做检查。例如,以下情况不被认为是好的做法: 相反,延迟初始化应该更像这样完成: 当然,除了简单地处理延迟初始化之外,还可能存在更复杂的逻辑。因此,考虑到这种事情通常是令人生厌的……何

  • 我们的业务逻辑代码主要在 controllers 目录中,新建一个 todo.py 文件, 核心代码如下 (完整代码参考这里),代码说明可以参考注释: # -*- coding: utf-8 -*- import flask from flask import request, redirect, flash, render_template, url_for from application.e