2012-10-22 63 views
0

我正在使用JSF2.0 + Spring 3.0构建应用程序。我的bean在此应用程序中由Spring管理。
在本申请中我有具有3个SelectOneMenuItems(JSF)JSF + Spring中的Bean Scopes管理

  1. 当用户选择第一下拉框值它然后将填充第二下拉框(如我置于EventChangeListener逻辑)
  2. 当一个形式从第2跌落用户选择值下降它将填充3日根据第二滴的选择下

下拉现在,当我提交表单,就会提交不错,但它不会不从包装箱中取出值。 春天我尝试了请求范围但它产生了另一个问题,那就是当一个值先选择下拉的时候让我说国家和我给下一个省下来的值(按照国家下拉选项填充省),春天考虑它是一个新的请求和刷新豆,所以国家的下拉值被删除,我得到NullPointerException,同时填充省份。 我现在该做什么,我真的得到了stucked.Please帮助

+0

aamir *目前接受的答案是否能真正解决您的具体问题?或者您是否因群体行为和/或高票而接受?我不做Spring,但aamir的答案似乎并不适用于Spring管理的bean。您的具体问题必须通过使用不同的作用域,某种会话范围(如JSF中的“视图范围”和CDI中的“对话范围”)来解决。您可以在[Google](http://google.com/search?q=jsf+view+scope+in+spring)示例中找到如何在Spring中模拟JSF视图范围。 – BalusC

回答

4

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

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

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

+0

那么哪个范围应该我现在使用? – William

+0

getSessionMap()告诉你的bean是会话范围,因为你从Session Map – khan

+1

得到它,如果使用spring,这看起来是错误的,因为它不会将该bean添加到spring上下文中。有http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/web/jsf/FacesContextUtils.html来检索一个spring上下文并与之交互。 – wemu

-1

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

+0

你确定视图范围可以帮助我这样的情况吗?因为在我的情况下,我的应用程序没有导航,它是一个基于Ajax的调用。 – William

+0

如果您的应用程序无法导航,那么提交表单后会发生什么? – Vrushank

+0

这是一个Ajax调用...我试图链接..他们没有为我工作...即使他们没有帮助我运行视图范围,当我实现他们:( – William

0

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

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

+0

是的,我认为我应该使用session scope在这里,但我的bean是由spring管理的,所以我应该在spring端使用哪个范围? – William

+0

会话范围以及确保web.xml中的spring配置是正确的,所以Spring应用程序上下文是可以的。在春天的环境中,而不是在faces-config中。不要复制配置,只使用spring bean解析器(以防万一) – wemu

+0

是的,我只是在applicationcontext.xml中resgister我的bean ..好吧,让我试试它通过使用会话范围..你认为它会删除表单后的值提交JSF的ajax调用? – William