我正在开发一个使用JSF 1.2作为视图层的Web应用程序。过去,我们已经能够使用Ajax刷新页面的某些部分。但是,我们已经被要求支持包括BB OS 5.x在内的Blackberry设备。此设备的默认浏览器具有非常有限的JS支持。
例如,假设我有一个带有选项的初始分类列表(水果,肉类,蔬菜)
<h:selectOneMenu id="foodCategorySelection" value="#{obj.foodCategory}">
<f:selectItem itemLabel="Select Food Category..." />
<f:selectItems value="#{foodService.foodCategories}" />
</h:selectOneMenu>
我想做的是能够刷新页面,以便下一个选择字段仅显示所选食品类别中的食物
<h:selectOneMenu id="foodSelection" value="#{obj.food}">
<f:selectItem itemLabel="Select a Food..." />
<f:selectItems value="#{foodService.filteredFoods}" />
</h:selectOneMenu>
是否有可用于实现此功能的通用模式?我认为必须以某种方式提交表单,以便在刷新食物选项之前将食物类别绑定到背景对象。
答案 0 :(得分:2)
对于那些有(有限)JS支持的人,只需让下拉提交表格由JS进行更改:
<h:selectOneMenu onchange="submit()">
在bean中,根据第一个下拉列表的提交值填充第二个下拉列表。您可以使用附加到第一个下拉列表的valueChangeListener
方法执行此操作。
对于没有任何JS支持的人,在第一个下拉列表旁边添加一个提交按钮,以便最终用户可以在第一个下拉列表中选择一个值后手动提交表单。您将填充附加到提交按钮的bean操作方法中的第二个下拉列表。