2011-08-19 98 views
1

在JSF页面上有两个依赖下拉列表正常工作。我在第一个下拉列表中使用了一个valueChangeListener,该列表填充了第二个下拉列表的列表。JSF中的依赖下拉列表失败验证

但是,当我尝试提交表单时,它失败了JSF验证。从测试我认为问题是,当页面加载我的依赖下拉列表是空的,然后我第一个下拉列表中选择后填充它。但是,当页面加载时,依赖列表中现在没有任何值在列表中,因此验证失败。我已经通过使用构造函数在页面加载时设置具有所有可能值的列表来确认此事,并且它使我的问题消失,但这不是一种可行的解决方案,因为加载所有值会导致我的页面性能下降。

任何想法如何让它工作?

Regards, Kevin。

回答

2

这完全是视图范围的bean的用例。在这种情况下使用请求作用域bean会违反JSF的粒度(可能,但很痛苦 - 就像使用刺猬作为沐浴海绵一样)。

如果这些解决方案有任何问题,请告诉我们,应该有一种方法来缓解它们;问题是,你应该使用视图范围并解决你可能遇到的任何问题,而不是试图逃避它。

+0

是的这解决了我的问题。我将范围从请求改为查看。我是使用JSF的新手,所以仍然需要我的头脑。我仍然不确定为什么View范围工作和Request范围失败? – kevfuzz

+0

@kevfuzz:一个普通的JSF请求会执行两件事:首先它重建web接口,因为它在前一个请求之后,然后它应用请求带来的任何更改(否则您的valueChangeListener将不起作用),然后呈现更改后的接口。使用请求作用域bean时,第一阶段将失败:JSF将尝试重建指向某些不再可用的任意值的下拉列表。只要你留在同一页面上并使用POST,视图范围的bean就会存活,所以值就在那里。顺便说一句:不要在构造函数中做任何事情。 – fdreger

+0

感谢您的信息。 – kevfuzz