Как я могу получить значение SelectOneMenu в Bootsfaces с помощью javascript или jquery?

Я новичок в JSF и хочу получить значение SelectOneMenu с помощью javascript или jquery для проверки формы.

Я попытался получить это обычным способом:

function apasa() {
   var a = $("#j_idt68Inner").val();
   alert(a);
}

Но он возвращает ноль. Это код JSF:

<b:column medium-screen="6">
  <b:selectOneMenu  colMd="2" required="true"  labelColMd="2" style="width:200px;margin-top: 30px;" >
    <f:selectItem itemLabel="Selecteaza raport" itemValue="" />
    <f:selectItem itemLabel="1.Neconcordante D394" itemValue="1" />
    <f:selectItem itemLabel="2.Neconcordante D112 REVISAL" itemValue="2" />     
  </b:selectOneMenu>
</b:column>

Этот компонент находится в форме. Я хотел бы получить данные из itemValue.


person S C    schedule 27.02.2019    source источник
comment
Проверка надежна только тогда, когда она выполняется на стороне сервера. Вы пробовали добавить f:validator ребенка к b:selectOneMenu?   -  person Selaron    schedule 27.02.2019


Ответы (1)


Общий совет: забудьте об идентификаторах, когда работаете с JSF. Скорее используйте псевдоклассы CSS.

Длинный ответ: JSF использует полностью определенные идентификаторы. Это отличная идея. Это позволяет использовать один и тот же идентификатор для каждой строки в таблице. Внутри JSF добавляет префикс к этим идентификаторам, но на первый взгляд скрывает это от вас. В большинстве случаев это приводит к красивому и простому API для Java-программистов.

Проблемы возникают, если вы используете jQuery. Среди прочего, полный идентификатор содержит как минимум одно двоеточие. Вы должны избегать этого в каждом селекторе jQuery. Кроме того, вам нужно знать полное имя.

Таким образом, вы либо знакомитесь с тем, как составлен идентификатор. Хотя это прекрасный подход, подход JSF к идентификаторам и прост, и умен! - Я не рекомендую это. Чаще всего проще использовать такой псевдокласс CSS:

<b:selectOneMenu class="raport-selection" >
  <f:selectItem itemLabel="Selecteaza raport" itemValue="" />
  <f:selectItem itemLabel="1.Neconcordante D394" itemValue="1" />
  <f:selectItem itemLabel="2.Neconcordante D112 REVISAL" itemValue="2" />     
</b:selectOneMenu>

Теперь вы можете получить доступ к значению с помощью простых селекторов jQuery:

$(".raport-selection").val();

Есть два "но":

  1. Подход псевдокласса терпит неудачу, если вы используете поле выбора несколько раз в таблице или в образе <ui:repeat>. В этом случае вы получите несколько копий одного и того же поля ввода, каждая из которых имеет один и тот же псевдокласс CSS.

  2. Есть два вкуса <b:selectOneMenu>. Если вы активируете опцию select2=true, BootsFaces генерирует совершенно другой HTML-код. Пожалуйста, посмотрите на https://select2.org/, чтобы увидеть, как реализован вариант select2.

person Stephan Rauh    schedule 27.02.2019
comment
Спасибо, я решил проблему, я дал форме идентификатор и выбрал идентификатор, и я получил значение в jquery следующим образом: $(#form\\:raport).val() - person S C; 28.02.2019