0

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

注意在每个表格中,我只考虑 1-2 个字段,仅用于说明目的。实际上,我将根据要求有很多领域。

我有n个申请人。

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

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

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

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

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

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

在申请人屏幕中,我将有申请人名单。单击此按钮后,我将获得该申请人的项目列表。一旦我点击它,我将看到第 1 阶段屏幕,在第 1 阶段屏幕中,在底部我将有第 2、3、4 阶段等的链接。

我看到我必须在所有阶段都使用 ProjectId 和 appId,所以我不确定我是否应该保留在会话范围内具有 projectId 和 appId 的 bean?有人可以建议我如何在 Java 中构造 bean 吗?

任何建议都会很棒。

4

1 回答 1

1

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

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

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

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

于 2012-11-28T20:44:33.920 回答