JSF: ManagedBean, Хорошее место для решения бизнес-логики?
У меня есть managedBean
для fileUpload
, после загрузки файла мне нужно вызвать разные парсеры на основе того, какое значение выбрано из раскрывающегося списка парсера, а затем в parser am, создающем объект DetailsClass
, где я вызываю getDetails
для этого конкретного класса, следует отметить, что ни один parserClass
и DetailsClass
не зарегистрирован в faces-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
}
Но в файле 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
через класс Parser
и ContractMapping
.
Кроме того,
Все ли "зарегистрировано" как управляемое - bean в faces-config?
Ответы
Ответ 1
Не уверен, но я думаю, что каждый bean зарегистрирован как <managed-bean>
в faces-config
. Что касается конкретной роли, которую играет класс, их можно разделить на
-
Model Managed-Bean
-
Управление управляемым - Bean
-
Управляемый управляемый Bean
-
Поддержка управляемого Bean
-
Утилита, управляемая - Bean...
Давая им соответствующее имя, вы можете различать их в faces-config
. В соответствии с работой, обслуживаемой bean, установите там области.