Частично отправка формы с целью «последовательного» запроса ввода - PullRequest
1 голос
/ 26 августа 2011

У меня есть страница JSF, где пользователи могут ввести свой автомобиль в мою базу данных.Форма имеет три поля ввода:

  • Производитель
  • Модель
  • Регистрация

Я использую PrimeFaces 3.0.M2 и обаПоля Manufacturer и Model являются полями ввода для автозаполнения:

<p:autoComplete id="manufacturer"
                minQueryLength="3"
                completeMethod="#{carController.completeManufacturer}"
                forceSelection="true"
                value="#{carController.manufacturer}" />

Поле для модели выглядит одинаково, с немного отличающимися значениями.

Управляемый компонент выглядит следующим образом ((сокращенно):

private String manufacturer;
private String model;
private String registration;

public List<String> completeManufacturer(String query) {
    List<String> ms = new ArrayList<String>();
    for (Manufacturer m : manufacturerFacade.findAllByName(query)) {
        ms.add(m.getLongName());
    }
    return ms;
}

public List<String> completeModel(String query) {
    List<String> ms = new ArrayList<String>();
    for (Model m :
            modelFacade.findAllByManufacturer(manufacturerFacade.findByName(manufacturer))) {
        ms.add(m.getShortName());
    }
    return ms;
}

Проблема заключается в заполнении поля model.Мне нужно это поле, чтобы отображать только результаты автозаполнения на основе выбранного производителя, но строка manufacturer в управляемом компоненте не заполняется, пока не будет отправлена ​​вся форма, поэтому я не могу искать модели, связанные с выбранным производителем.

Как бы я отправил только поле manufacturer без отправки всей формы, чтобы я мог посмотреть модели выбранного производителя?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 26 августа 2011

Просто добавьте selectListener, вот так:

<p:autoComplete id="manufacturer"
                minQueryLength="3"
                completeMethod="#{carController.completeManufacturer}"
                forceSelection="true"
                selectListener="#{carController.manufacturerSelected}"
                value="#{carController.manufacturer}" />

и затем в контроллере:

public void manufacturerSelected(SelectEvent vce) {
    String nameOfSelected = vce.getObject().toString();
    // whatever logic comes to your mind
}
2 голосов
/ 26 августа 2011

Вы можете добавить дополнительный обработчик ajax в поле ввода manafucturer, а затем обработать событие onchange.В обработчике на стороне сервера просто запомните новое значение в своем компоненте поддержки.

Если затем поместить компонент поддержки в область просмотра, запросы ajax, исходящие из поля ввода модели, получат тот же экземпляру вас есть прямой доступ к полю производителя, которое вы ранее запомнили.

...