Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> selectOneMenu change 
:(
    Опции темы
4epT
Дата 4.10.2010, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: 3
Всего: 3



Добрый вечер! Есть БД, в ней 2 таблицы Страны и Города (связь я думаю понятна, в каждый город может принадлежать только однйо стране. связь идет по ИД). С базой работаю через Hibernate. Описаны 2 класса country и city, также написан Bean в котором 2 метода:
Код

@SessionScoped
@ManagedBean (name = "ui")
public class UIBean {

    private String selected;

    public UIBean() {
    }

    public String getSelected() {
        return selected;
    }

    public void setSelected(String selected) {
        this.selected = selected;
    }

    public UISelectItems getAllCountrys(){

        List selectItems = new ArrayList();
        UISelectItems items = new UISelectItems();
        Session session = HibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        ArrayList<Country> list = (ArrayList<Country>) session.createCriteria(Country.class).list();
        selectItems.add(new SelectItem("--", "--"));
        for (Country country : list) {

            selectItems.add(new SelectItem(country.getId(), country.getCountry()));

        }
        items.setValue(selectItems);
        session.getTransaction().commit();
        session.close();

        return items;
    }


    public UISelectItems getAllCitys(){

        UISelectItems items = new UISelectItems();
        Session session = HibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        /*Country value = FacesUtils.getValue("#{ui.selected}", Country.class);*/
        
        if( selected == null || selected.equals("--") ){
            List selectItems = new ArrayList();
            selectItems.add(new SelectItem("-", "-"));
            items.setValue(selectItems);
            return items;
        }
        System.out.println(selected.getClass());
        System.out.println(selected.toString());
        int ol = Integer.parseInt(selected);
        ArrayList<City> list = (ArrayList<City>) session.createQuery("from City as c where c.country = :country").setParameter("country", ol).list();
        items.setValue(list);
        session.getTransaction().commit();
        session.close();

        return items;
    }

}


и есть страница, в которой 2 комбобокса. хочу что бы при выборе страны во второй комбо бокс выводились города) подскажите что я не так делаю?

вот страница:
Код

<ui:define name="content">
        <h:form id="form1">
            <ui:debug hotkey="O" />
            <p:growl id="growl" showDetail="true" life="4000" />
            <h:panelGrid columns="2" id="panelRigistration">
                <h:selectOneMenu id="countrys" required="true" value="#{ui.selected}">
                    <f:convertNumber integerOnly="true" />
                    <f:selectItems binding="#{ui.allCountrys}" />
                </h:selectOneMenu>
                <h:selectOneMenu id="citys" required="true">
                    <f:selectItems binding="#{ui.allCitys}" />
                </h:selectOneMenu>
                <h:commandButton id="Ololo" value="Ololololo" />
            </h:panelGrid>
        </h:form>
    </ui:define>


в бине есть поле selected оно не изменяется при выборе какой либо страны( оно всегда null

PM MAIL   Вверх
iluvatar
Дата 4.10.2010, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 266
Регистрация: 17.9.2007

Репутация: 4
Всего: 4



Я не силен в JSF, но насколько я понимаю, тут только аякс. 
Если он встроен в этот компонент, то проблема мэппинга. 
Если не встроен, то писать ручками.
PM MAIL ICQ   Вверх
4epT
Дата 4.10.2010, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: 3
Всего: 3



А может кто то объяснить как правильно это делать? Можно без кусков кода, но по шагам простым языком) буду очень признателен!))
PM MAIL   Вверх
m0zg
Дата 4.10.2010, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 30.7.2007

Репутация: 2
Всего: 2



Если писать самому не хочется, можно заюзать a4j. Будет примерно так:

Код

<h:panelGrid columns="2" id="panelRigistration">
     <h:selectOneMenu id="countrys" required="true" value="#{ui.selected}">
          <f:convertNumber integerOnly="true" />
          <f:selectItems binding="#{ui.allCountrys}" />
          <a4j:support event="onchange" reRender="citys" />
     </h:selectOneMenu>
     <h:selectOneMenu id="citys" required="true">
          <f:selectItems binding="#{ui.allCitys}" />
          </h:selectOneMenu>
     <h:commandButton id="Ololo" value="Ololololo" />
 </h:panelGrid>



Также, в a4j:support можно параметры какие-нибудь передать, action или actionListner повесить, ну много чего. Хотя, если юзаешь JSF 2, то можно обойтись и без a4j.

Это сообщение отредактировал(а) m0zg - 4.10.2010, 17:48
PM MAIL   Вверх
4epT
Дата 4.10.2010, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: 3
Всего: 3



Цитата(m0zg @ 4.10.2010,  17:47)
Если писать самому не хочется, можно заюзать a4j. Будет примерно так:

Код

<h:panelGrid columns="2" id="panelRigistration">
     <h:selectOneMenu id="countrys" required="true" value="#{ui.selected}">
          <f:convertNumber integerOnly="true" />
          <f:selectItems binding="#{ui.allCountrys}" />
          <a4j:support event="onchange" reRender="citys" />
     </h:selectOneMenu>
     <h:selectOneMenu id="citys" required="true">
          <f:selectItems binding="#{ui.allCitys}" />
          </h:selectOneMenu>
     <h:commandButton id="Ololo" value="Ololololo" />
 </h:panelGrid>



Также, в a4j:support можно параметры какие-нибудь передать, action или actionListner повесить, ну много чего. Хотя, если юзаешь JSF 2, то можно обойтись и без a4j.

насколько я понимаю, если вешать actionListener то это уже будет не ajax ?

а можно это сделать без использования a4j ?
PM MAIL   Вверх
iluvatar
Дата 5.10.2010, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 266
Регистрация: 17.9.2007

Репутация: 4
Всего: 4



Могу написать как вообще должно работать.

Есть два селекта - с выбором страны и города.

1. На первый вешаем событие onchange, в нем шлем ajax-запрос на сервер по адресу "/getCity?country=" и прибавляем значение из select'a. Все это пишется на клиенте на JavaScript

2. Сервлет должен сделать запрос к БД, и вернуть результат в виде xml или json.

3. На клиенте на прием ответа ставим ф-цию, которая парсит ответ сервера и если все прошло удачно - очищает и заполняет второй селект полученными данными.


Рекомендую использовать jquery.
PM MAIL ICQ   Вверх
m0zg
Дата 5.10.2010, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 30.7.2007

Репутация: 2
Всего: 2



Цитата(4epT @ 4.10.2010,  20:01)
Цитата(m0zg @ 4.10.2010,  17:47)
Если писать самому не хочется, можно заюзать a4j. Будет примерно так:

Код

<h:panelGrid columns="2" id="panelRigistration">
     <h:selectOneMenu id="countrys" required="true" value="#{ui.selected}">
          <f:convertNumber integerOnly="true" />
          <f:selectItems binding="#{ui.allCountrys}" />
          <a4j:support event="onchange" reRender="citys" />
     </h:selectOneMenu>
     <h:selectOneMenu id="citys" required="true">
          <f:selectItems binding="#{ui.allCitys}" />
          </h:selectOneMenu>
     <h:commandButton id="Ololo" value="Ololololo" />
 </h:panelGrid>



Также, в a4j:support можно параметры какие-нибудь передать, action или actionListner повесить, ну много чего. Хотя, если юзаешь JSF 2, то можно обойтись и без a4j.

насколько я понимаю, если вешать actionListener то это уже будет не ajax ?

а можно это сделать без использования a4j ?

Можно. Выше написали уже smile.

Или, если JSF 2.0, то почитай про <f:ajax />
PM MAIL   Вверх
4epT
Дата 5.10.2010, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: 3
Всего: 3



Насчет JavaScript, я понимаю что так можно сделать) но поставил себе задачу именно JSF 2.0 + Hibernate ...

насчет <f:ajax почитаю) буду пробовать ... спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0457 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.