2010-12-07 2 views
0

Я разрабатываю веб-приложение, которое использует JSF 1.2 для слоя представления. Раньше мы могли использовать Ajax для обновления частей страницы. Тем не менее, нам было дано требование поддерживать устройства Blackberry, включая BB OS 5.x. Браузер по умолчанию для этого устройства имеет очень ограниченную поддержку JS.JSF Refresh without Ajax

Например, предположим, что у меня есть первоначальный категорический список с вариантами (фрукты, мясо, овощи)

<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> 

Есть ли общий шаблон, который можно использовать для выполнения этой работы? Я предполагаю, что форма должна быть представлена ​​каким-то образом, чтобы связать категорию продуктов с базовым объектом, прежде чем обновлять варианты продуктов.

ответ

2

Для тех, с поддержкой (ограничено) JS, просто дайте выпадающий отправить форму с помощью JS на изменения:

<h:selectOneMenu onchange="submit()"> 

В фасоли, заполнить 2-го выпадающего меню на основе представленной стоимости 1-го выпадающего списка. Вы можете сделать это в методе valueChangeListener, который прикреплен к первому выпадающему списку.

К тем, у кого нет поддержки JS, добавьте кнопку отправки рядом с первым выпадающим списком, чтобы конечный пользователь мог вручную отправить форму после выбора значения в первом выпадающем списке. Вы заполняете второе выпадающее меню в методе действия компонента, которое прикрепляется к кнопке отправки.