【问题标题】:what should I keep in what scope我应该在什么范围内保留什么
【发布时间】:2012-11-16 06:13:29
【问题描述】:

我正在使用 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 吗?

任何建议都会很棒。

【问题讨论】:

标签: java jsf jsf-2 javabeans


【解决方案1】:

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

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

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

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

【讨论】:

  • 对于第 1 点,我已经更新了问题。对于第 2 点,在每个阶段门中,我都有不同的字段。我的意思是在stage1datatable 我有 6 个字段但是在stage2datatable 中我有 9 个字段等等...
猜你喜欢
  • 1970-01-01
  • 2013-02-14
  • 2016-04-08
  • 2012-12-16
  • 1970-01-01
  • 1970-01-01
  • 2023-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多