我应该保持什么范围

时间:2012-11-28 11:45:15

标签: java jsf jsf-2 javabeans

我正在使用JSF 2.0和MySQL创建新网站。以下是我所拥有的。

注意在每个表中,我只考虑1-2个字段,仅用于解释目的。实际上,根据要求,我会有很多字段。

我有很多申请人。

ApplicantDataTable
+++++++++++++++++++
 appId     PK
 appName
+++++++++++++++++++

每个申请人都会有很多项目。

ProjectDataTable
+++++++++++++++++++
 proId     PK
 proName
 appId     FK
+++++++++++++++++++

每个项目都有很多阶段,每个阶段我都需要输入数据。

stage1datatable
+++++++++++++++++++
 stg001id   PK 
 proId      FK
 stg001name
+++++++++++++++++++

stage2datatable
+++++++++++++++++++
 stg002id   PK 
 proId      FK
 stg002name
+++++++++++++++++++

在申请人的屏幕上,我会有申请人名单。一旦我点击这个,我将获得该申请人的项目清单。一旦我点击它,我将有第一阶段的屏幕,在第一阶段的屏幕,在底部,我将有阶段2,3,4等的链接。

我看到我将不得不采取ProjectId&适用于所有阶段,所以我不确定我是否会保留在会话范围内具有projectId和appId的bean?有人可以建议我如何在Java中构造bean?

任何建议都会很棒。

1 个答案:

答案 0 :(得分:1)

理想情况下,会话范围适用于您的用例I.e.将两个ID存储在会话范围内,但实际上,它可能有点过分。如果两个ID都将被处理(因此可以在范围内重新存储),您可以将它们保存在flash scope中。在每个目标页面上,您可以访问这些ID,如果您在下一个请求中需要它们,只需将它们重新存储在同一范围内即可。这样就不会有浪费。在请求完成后,使用putNow()方法保证变量可用。

与您的问题无关,我不禁注意到您的数据模型中的一些问题

  1. 为什么要在两个表中复制appName变量?看起来像一些不必要的非规范化

  2. 为每个项目阶段创建一个表将在不久的将来带来问题。除非您完全确定您的项目阶段永远不会超过2或3,否则我强烈建议您将所有项目阶段合并到一个表中,然后将project_stage_id添加为该表中的字段。使用唯一键约束和触发器的组合来确保不会发生重复,并且项目阶段ID是每个项目的顺序(如果这是一个要求)