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

我有managedBean for fileUpload ,一旦上传文件然后我需要根据从解析器下拉列表中选择的值调用不同的解析器,然后在解析器中创建getDetails对象,我在那里调用该特定类的getDetails方法,这里需要注意的事项既不是parserClass也不是parserClass都在faces-config.xml中注册,我的问题是

  • 如果我想维护从FileUpload类到Parser类到DetailsClass会话信息,那么我应该在faces-config.xml定义它,但是如果定义了parser类和managedBean ,它应该被定义为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 dataList = new ArrayList(); ContractManager contractManager = new ContractManager(); public PositionParserDelta() { } public void getQuotes(String fileName) { try { Map gsLookup = contractManager.getContractsMap(ContractManager.VendorQuotes.KRT); CSVReader reader = new CSVReader(new FileReader(fileName), '\t'); String[] header = reader.readNext(); dataList = reader.readAll(); List tradeBeanList = new ArrayList(); for (String[] data : dataList) { //Some Business Logic } } catch (Exception e) { e.printStackTrace(); } } } 

我的contractManager类看起来像

  public class ContractManager extends Base { private List List = new ArrayList(); 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 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 getContractsMap(VendorQuotes vendorQuotes) { //Some Logic } 

但是在faces-config.xml文件中,

   fileUpload trade.UploadBlotterBean session  

基本上我的问题是,

如果假设我从managedBean调用其他类,那么应该如何在faces-config.xml定义它们,因为我是JSF新手,是从managedBean调用其他类并在这些类中考虑一些业务逻辑被认为是好的做法?

另外,我需要确保我在ParserContractMapping类中保持在UploadFile获得的会话。

也,

在faces-config中,所有内容都被“注册”为managed-bean吗?

不确定,但我认为每个bean都在faces-config注册为 。 关于特定角色,一个类可以分类,它们可以分类

  1. Model Managed-Bean

  2. 支持托管Bean

  3. Controller Managed-Bean

  4. 支持Managed-Bean

  5. 实用程序托管Bean …

通过给它们适当的名称,你可以在faces-config区分它们。 根据bean提供的工作,设置范围。