0

我正在使用 JSF2.0 + Spring 3.0 构建一个应用程序。我的 bean 在这个应用程序中由 Spring 管理。
在这个应用程序中,我有一个包含 3 个 SelectOneMenuItems(JSF) 的表单

  1. 当用户选择第一个下拉框值时,它将填充第二个下拉框(因为我在 EventChangeListener 中放置了逻辑)
  2. 当用户从第二个下拉列表中选择值时,它将根据第二个下拉列表的选择填充第三个下拉列表

现在,当我提交表单时,它会很好地提交,但不会从框中删除值。我在春季尝试了请求范围,但它产生了另一个问题,即当通过第一个下拉列表选择一个值时,比如说国家,我将值发送到省的下一个下拉列表(根据国家下拉选择填充省),春季认为它是新请求并刷新 bean,因此国家的下拉值被删除,我NullPointerException在填充省份时得到。我现在该怎么办我真的被卡住了。请帮忙

4

3 回答 3

4

您可以自己创建一个新 bean,并使用FacesContext.

FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("myBean", new MyBean());

通过在代码中使用它,您可以覆盖 bean 的当前实例并摆脱旧 bean。

于 2012-10-23T05:49:31.833 回答
0

我想说会话范围在这里很好。我认为您需要对下拉列表的选定值进行适当的管理。更改 DropDown1 后,您需要重置 DropDown2 和 DropDown3。一旦你改变 DropDown2 重置 DropDown3。重置是指仅将有效数据加载或过滤到这些组件的模型中。

您正在使用 JSF2。你在使用f:ajax标签吗?你有可用的代码片段吗?那里可能有一个问题,这里和那里有点棘手。

于 2012-10-22T06:19:22.903 回答
-1

您可以使用最适合您的用例的View Scope 。但由于 Spring 3.0 不支持视图范围,您需要创建自定义视图范围实现以供 Spring 识别。您可以参考此链接以供参考。

于 2012-10-22T05:58:29.333 回答