LINUX.ORG.RU

JSF и javascript

 ,


0

1

C jsf я мало знаком и не могу понять один момент. Мне необходимо динамически изменять select-поле. На странице есть один селект, который генерируется из БД. Ещё один селект создаётся вручную. Нужно прикрутить js-функцию, которая будет генерировать селект, исходя из других двух.

Примерный код:

<h:selectOneMenu id="id1" value="#{controller1.selected.name}">
    <f:selectItems value="#{controller2.itemsAvailableSelectOne}"/>
    <f:ajax event="change" onevent="foo"/>
</h:selectOneMenu>
...
<select id="id2" onChange="foo">
    <option>1</option>
    ...
    <option>10</option>
</select>
<select id="target">
</select>
<script>
function foo() {
    var val1 = #{controller2.select.field1};
    var val2 = #{controller2.select.field2};
    var val3 = $('id2').value;
    var html1 = "<option>" + val1 + val3 + "</option>";
    var html2 = "<option>" + val2 + val3 + "</option>";
    $('#target').html(html1 + html2);
}
</script>

Но, так как при загрузке страницы по-умолчанию в первом селекте не выбрано ничего, то первая строчка js-функции будет неправильной, и функция не создастся. Как это решить?


Ответ на: комментарий от RedPossum

не прокатит, скрипт создаётся при загрузке страницы, эта переменная всегда будет пустой. по идее, нужно ловить ответ из jsf.ajax.response, но я не очень понимаю, что туда нужно передавать

memnek ()

вещества. толи у меня толи у ТСа

Мне необходимо динамически изменять select-поле.

в чем проблема? такое возможно

На странице есть один селект, который генерируется из БД.

и здесь нету ничего удивительного

Ещё один селект создаётся вручную.

ну допустим

Нужно прикрутить js-функцию, которая будет генерировать селект, исходя из других двух.

а вот с этого места поподробней. как ты собираешся пользоватся рез-ом js-функции которая (уже) на клиенте? если рещультат может быть использован только на сервере

в общем ЯННП

ZuBB ★★★★★ ()
Последнее исправление: ZuBB (всего исправлений: 1)
Ответ на: вещества. толи у меня толи у ТСа от ZuBB

я уже понял, что подход, который я хотел использовать фейловый. но в jsf есть такая фигня, как <f:ajax>. при событии (change, в данном случае) идёт запрос на сервер, там обрабатываются данные, и возвращается ответ. я в js-функции хочу его обработать как-то так

function foo() {
    var data = jsf.ajax.response();
    ...
    var html_data = bar(data); // функция bar вытаскивает нужную инфу из xml-ответа
    $('#id_baz').html(html_data);
}
но jsf.ajax.response принимает 2 аргумента: запрос и контекст. а вот откуда брать эти аргументы я не очень понял.

memnek ()
Ответ на: комментарий от memnek

принимает 2 аргумента: запрос

шо прямо таки raw-запрос?

контекст

поиграйся. мож null, this, или пустой аргумент тебя спасут.

а вообще ты наверное чтото не так делаеш

ZuBB ★★★★★ ()
Ответ на: комментарий от ZuBB

так вот и хотелось бы узнать, как это в jsf делается. в том же django всё понятно и просто

memnek ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.