Передача переменных в события javascript на тегах struts 2

63
5

У меня есть простая, но раздражающая проблема. У меня есть список объектов, который успешно заполняет <s:select>. Тег выглядит следующим образом (пожалуйста, не обращайте внимания на испанские имена или информацию:

<s:select name="curProfesor.pais" value="%{curProfesor.pais}" list="paises" listValue="nombre" headerKey="" headerValue="Seleccione" label="País de Residencia:"  onchange="changer(1,???})"/>

и структура класса списка:

public class Pais{
private int id;
private int iso_num;
private String iso2;
private String iso3;
private String nombre;

проблема изображается как??? и я не могу передать информацию из списка в функцию "onchange", то, что я хочу передать, является идентификатором объекта, и я попытался использовать скобки OGNL ( % {}) и, похоже, не работает.

Любая помощь по этому вопросу была бы высоко оценена

EDIT: то, что я пытаюсь передать, является идентификатором текущего выбранного объекта, то есть идентификатором выбранного значения <s:select>

спросил(а) 2021-01-25T18:16:55+03:00 4 месяца, 2 недели назад
1
Решение
76

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

Во-первых, вам нужно сделать, чтобы идентификатор Pais отображался как ключ элементов опции, как уже упоминалось SKS.

<s:select id="curProfesor_pais" name="curProfesor.pais" list="paises" listKey="id" listValue="nombre" headerKey="" headerValue="Seleccione" label="País de Residencia:" onchange="changer('curProfesor_pais')"/>

Примечание listKey="id". Я также установил идентификатор в элемент, чтобы мы могли легче ссылаться на него.

Во-вторых, просто получите выбранный идентификатор параметра с помощью функции JavaScript.

function changer(elementId) {
var selectedId = document.getElementById(elementId).value;
alert(selectedId);
//.......
}

Передача идентификатора элемента в функцию changer действительно не требуется, если вы не планируете повторно использовать эту функцию.

Также обратите внимание, что value="%{curProfesor.pais}" является избыточным, так как имя элемента одинаково - curProfesor.pais.

Всегда хорошо проверять отображаемый HTML, если что-то не работает должным образом. Если бы вы его осмотрели, вы бы заметили, что идентификатор Pais не отображается как идентификатор параметра.

ответил(а) 2021-01-25T18:16:55+03:00 4 месяца, 2 недели назад
45

Это должно сделать:


<s:select list="mylist" listKey="myid" id="listid" onchange="callme()"/>

<script type="text/javascript">
function callme(){
var v=document.getElementById('listid').value; //id of the selected element
alert(v);
}
</script>

ответил(а) 2021-01-25T18:16:55+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема