Передача атрибутов или параметров из js/jsp в поддерживающий компонент с помощью JSF 1.2

Я пишу очень простой интерфейс для базы данных Oracle. Он основан на JSF 1.2, jsp, развернут на Glassfish-ee-2.1 и разработан с помощью NetBeans 6.5.1.

Да, я знаю, что это 2012 год.

Нужно прочитать содержимое, возможно, обновить его и сохранить обратно в БД.

Он отлично работает для текстовых элементов. Я добавил атрибуты привязки к своим элементам пользовательского интерфейса, и я могу получить к ним доступ из bean-компонента, чтобы получить значение различных текстовых полей и т. д.

Я использую (это требование?!) компонент msDropdown (официальная страница), на основе jquery, который позволяет иметь красивое выпадающее меню с изображением и текстом.

Однако, поскольку этот элемент не является стандартным, я не нашел способа использовать атрибут привязки для доступа к нему из вспомогательного компонента.

Это означает, что я не могу установить текст при загрузке страницы, как я могу для текстовых элементов, и, кроме того, я не могу получить значение выбранного компонента при обработке отправки в компоненте поддержки.

msDropDown определяется в JSP следующим образом:

<webuijsf:markup>
    <select id="status" name="status" style="left: 150px; top: 62px; width:100px">
        <option data-description="" data-image="base_3.gif" value=""></option>
        <option data-description="" data-image="base_0.gif" value="0"></option>
        <option data-description="" data-image="base_1.gif" value="1"></option>
        <option data-description="" data-image="base_2.gif"  value="2"></option>
    </select>
</webuijsf:markup>

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

<webuijsf:script>
    var oHandler1 = $("#status").msDropdown().data("dd");
    var index = oHandler1.selectedIndex;
</webuijsf:script>

Затем я пытаюсь передать эту переменную своему вспомогательному компоненту следующим образом:

<webuijsf:button actionListenerExpression="#{editApplication.submitUpdate}" actionExpression="#{editApplication.update_action}" id="update"
                                     style="height: 24px; left: 623px; top: 408px; position: absolute; width: 72px" text="Update">
    <f:attribute name="currentIndex" value="#{currentRow.value['APPNAME']}"/>
    <f:attribute name="currentStatus" value="<%=index%>"/>
</webuijsf:button>

Но я всегда получаю уже сообщенную ошибку, что ‹ не может использоваться в значении.

Любая идея, как я могу получить доступ к этому специальному раскрывающемуся списку из компонента? или передать его значение bean-компоненту в этом отношении?

Большое спасибо за вашу помощь, и дайте мне знать, если вам нужно больше кода!

Оли с 2006г./.


person Olivier Pallière    schedule 29.11.2012    source источник


Ответы (1)


msDropdown работает путем перестройки обычного выбора html. Но если вы на самом деле вставите html-выбор в свой документ jsf, у вас не будет никакой интеграции с жизненным циклом jsf.

Решение состоит в том, чтобы использовать фактический компонент jsf, selectOneMenu вместо этого. Он будет полностью интегрирован в жизненный цикл, а это означает, что вам не нужны какие-либо взломы для извлечения значения. Он будет отправлен, как и любой другой компонент на вашей странице.

selectOneMenu отображается как обычный html-выбор на стороне клиента, что означает, что вы можете использовать с ним msDropDown. Единственная сложность — получить идентификатор компонента. Вместо этого я предлагаю использовать styleClass. Так будет проще.

<h:selectOneMenu id="status" styleClass="statusSelect" style="left: 150px; top: 62px; width:100px">
    <f:selectItem itemValue=""></option>
    <f:selectItem itemValue="0"></option>
    <f:selectItem itemValue="1"></option>
    <f:selectItem itemValue="2"></option>
</h:selectOneMenu>

<webuijsf:script>
  //setup metadata (images and such)
  var $select = $('.statusSelect');
  var children = $select.children('option');
  $(children[0]).data('image','base0.gif');
  //... and so on to add your metadata

  var oHandler1 = $select.msDropdown().data("dd");
  var index = oHandler1.selectedIndex;
</webuijsf:script>
person Joeri Hendrickx    schedule 29.11.2012
comment
Спасибо за ответ. После долгих возни мне удалось отобразить компонент, но только после того, как я удалил тег id в selectOneMenu. Однако я не вижу элемент на вкладке «Дизайн» в netbeans, поэтому я не могу добавить атрибут привязки, который позволил бы мне получить значение в bean-компоненте. Я буду искать способ... - person Olivier Pallière; 29.11.2012
comment
И поскольку у меня нет идентификатора, я не могу использовать его в какой-то форме. сильно бьюсь головой, но ничего не выходит ;) - person Olivier Pallière; 29.11.2012
comment
хотя он должен работать и с идентификатором. Странно, что без него не отображается. Что касается вкладки дизайна; если ваши инструменты мешают вам выполнять свою работу, смените инструменты :) - person Joeri Hendrickx; 29.11.2012
comment
Да, у меня нет проблем с изменением инструментов, но одним из моих жестких требований является работа со Glassfish 2.1.1, и он не поддерживается в версии 7.x netbeans;) - Если я добавлю атрибут привязки вручную, используя идентификатор в selectOneMenu, то я получаю эту ошибку от js при запуске моего приложения: Неперехваченная ошибка: синтаксическая ошибка, нераспознанное выражение: неподдерживаемый псевдо: статус Оно отображается, но пусто - person Olivier Pallière; 29.11.2012