JSF + Spring中的Bean范围管理

时间:2012-10-22 05:44:54

标签: spring java-ee spring-mvc jsf-2

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

  1. 当用户选择第一个下拉框值时,它将填充第二个下拉框(因为我在EventChangeListener中放置了逻辑)
  2. 当用户从第二次下拉菜单中选择值时,将根据第二次下拉菜单的选择填充第三次下拉
  3. 现在当我提交表单时,它会提交正常但不会从框中删除值。 我在春天尝试了请求范围,但是它产生了另一个问题,即当第一次下拉选择一个值时说国家和我将值发送到省的下一个下拉(根据国家下拉来填充省份)选择),春天认为它是一个新的请求并刷新bean,所以国家的下拉值被删除,我得到NullPointerException,同时填充省份。 我现在应该怎么做才真的被困住了。请帮忙

3 个答案:

答案 0 :(得分:4)

您可以自己创建一个新bean,并使用FacesContext将其放在所需的范围内。

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

您可以使用最适合您用例的View Scope。但是由于Spring 3.0不支持视图范围,因此您需要为Spring创建自定义视图范围实现以进行识别。您可以参考this link作为参考。