JSF - значения привязки компонентов добавляются динамически - PullRequest
1 голос
/ 15 сентября 2010

Я хочу реализовать что-то подобное с помощью JSF. (Часть экрана поиска) alt text

Все больше новых строк будут добавляться динамически при нажатии кнопки « + », а строка удаляется при нажатии кнопки « - ». Вопрос в том, чтобы связать значения (пользовательский ввод в этих динамически создаваемых строках) с базовой моделью.

Я создал сессионный компонент поддержки сессий. Некоторые части кода,

public class BackingBean{
  //other code

  private List<Criteria> searchFilters; // Each criteria is bound to a row

  public void init(){
   //init code
  }
  public void addEmptyCriteria(){
    searchFilters.add(MyFactory.createNewCriteria());
  }

}

Действие кнопки + вызывает метод addEmtpyCriteria и повторно отображает (используя a4j) весь раздел (с новыми строками).

Это просто шаблон, и все работает нормально, пока боб находится в области сеанса. Но более интуитивно понятно иметь его в объеме запроса. Один поиск - это один запрос, сделанный пользователем и никоим образом не связанный с сеансом пользователя. Кроме того, наличие его в сеансе вынуждает разработчика очистить / удалить основу из порядка сеансов для отображения нового экрана поиска.

Есть ли лучший способ сделать это? Правильно ли иметь его в рамках сеанса?

1 Ответ

1 голос
/ 15 сентября 2010

Когда вы используете JSF 2.0, вы можете просто поместить боб в область действия view.

@ManagedBean
@ViewScoped
public class BackingBean {
    // ...
}

Если вы все еще используете JSF 1.x, тогда ваша лучшая ставка -используя a4j:keepAlive.Сделайте ваш запрос bean-объекта доступным и добавьте на страницу JSF следующее:

<a4j:keepAlive beanName="managedBeanName" />

Если бы вы не использовали Ajax4jsf, я бы предложил Томагавка t:saveState.Это в основном то же самое.

<t:saveState value="#{managedBeanName}" />
...