Модель MVC Spring - динамический доступ к индексу списка атрибутов

У меня есть вопрос о том, как динамически получить доступ к индексу из списка атрибутов модели. В моем коде есть javascript, который считывает значение из модели. Модель имеет атрибут, который потенциально является списком.

document.getElementById("phoneNumberRPhone").value = "${model.people[index].phoneNumber.number}";

Здесь вы можете видеть, что я пытаюсь установить значение javascript для числа, полученного из модели, в которой у меня может быть несколько человек. Индекс - это мое динамическое значение. Он отлично работает, если я специально указываю model.people[0] или model.people[1], но если я пытаюсь установить число для индексации и использовать индекс динамически, это больше не работает.

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


person David Levins    schedule 27.06.2012    source источник


Ответы (1)


По-видимому, ${index} вообще не существует в области JSP/EL в тот момент, когда JSP/EL должен напечатать этот фрагмент кода JS. Например, это будет работать только с вами (хотя этот подход весьма сомнителен):

<c:forEach items="${model.people}" varStatus="loop">
    document.getElementById("phoneNumberRPhone").value = "${model.people[loop.index].phoneNumber.number}";
</c:forEach>

Однако имейте в виду, что JSP — это просто генератор HTML-кода, а JavaScript — его часть. JSP и JavaScript не работают синхронно. Щелкните правой кнопкой мыши страницу в веб-браузере и выполните Просмотр исходного кода, чтобы увидеть ее.

person BalusC    schedule 27.06.2012
comment
Спасибо за ваш ответ! Я думал об использовании foreach, но это казалось действительно странным подходом, когда мне приходилось перебирать список каждый раз, когда я хотел выбрать новое значение. Может быть, это единственный способ сделать это с тем, как я это закодировал. - person David Levins; 27.06.2012
comment
Да, как уже упоминалось, этот подход вызывает сомнения. Скорее всего, вы на самом деле ищете решение в совершенно неправильном направлении. Если вы подробнее расскажете о функциональных требованиях, для которых, по вашему мнению, это правильное решение, возможно, мы сможем предложить правильное решение. Еще раз: JSP — это генератор HTML-кода. Все, что извлекает веб-браузер, — это один HTML-код вместе с некоторым количеством JS. JSP работает не в веб-браузере, а на веб-сервере. JS работает в веб-браузере, а не на веб-сервере. - person BalusC; 27.06.2012
comment
Возможно, мне нужно атаковать это с другой стороны. Вот контекст. У меня есть имя клиента, которое я ввел в веб-форму. Я отправляю форму и получаю несколько телефонных номеров. Я добавляю номера телефонов, возвращенные вместе с именами людей, прикрепленными в качестве атрибутов людей модели. Затем я нажимаю на данные на странице и хочу выбрать этого конкретного человека для повторного использования в другом месте. Однако количество людей/номеров, которые могут быть возвращены, является динамическим. - person David Levins; 27.06.2012
comment
Абсолютно ли необходимо, чтобы для этого вам нужен был JavaScript, а не просто отправка формы на сервер, при необходимости через ajax? - person BalusC; 27.06.2012
comment
Ну, желание не в том, чтобы перезагружать страницу только для того, чтобы манипулировать уже полученными данными. Хотя то, что вы сказали, действительно помогло. Я думаю, что мне может понадобиться загрузить данные в списки javascript с помощью одного foreach и ссылаться на них таким образом. Это должно дать мне ту же функциональность, которую я искал. - person David Levins; 27.06.2012
comment
Да, вы могли бы сделать это таким образом. - person BalusC; 27.06.2012