как получить значение из кода javascript в сценарий jsp на той же странице jsp

ниже мой код (1.jsp)

<html>
<head>
  <script type="text/javascript">

   function changeFunc() {
var selectBox = document.getElementById("selectBox");
var selectedValue = selectBox.options[selectBox.selectedIndex].value;
  document.write("\n value is"+selectedValue);
  }

 </script>
</head>
 <body>
<form method="post" action="SampServlet">
  <select id="selectBox" name="selurl" onchange="changeFunc();">
   <option value="1">Option #1</option>
   <option value="2">Option #2</option>
  </select>
</form>
 </body>
</html>

Здесь я вставил этот код на страницу jsp. И получил значение «selectedValue» из javascript в скриптлет с тем же jsp, как это.

<% String val=(String)request.getParameter("selurl");
System.out.println("\n selected value is:"+val); %>

Я получаю выбранное значение как нулевое в качестве вывода. И если я печатаю параметр javascript selectedValue, он дает мне правильный вывод, т. Е. Вывод в качестве выбранного параметра. Но в скриптлете я получаю значение null. Где ошибка. Я включил все заголовки и директивы. Пожалуйста, помогите мне.


person user2365917    schedule 20.05.2013    source источник
comment
Я пробовал использовать подходы, представленные в stackoverflow.com/questions/5701031/, но не получаю. Все еще получаю нулевое значение   -  person user2365917    schedule 20.05.2013


Ответы (4)


В вашем браузере есть только html, javascript и css. Весь код JSP предназначен для запуска на сервере. Таким образом, вы получаете только вывод файла jsp. И после этого вы не сможете изменить код jsp.

person me_digvijay    schedule 20.05.2013
comment
Тогда как я могу получить значение выбранного параметра в скриптлете jsp. Пожалуйста, помогите мне. Мне нужно это значение для отправки в сервлет и получения сведений о соответствующем параметре (выбранном параметре). Пожалуйста, как я могу получить значение из javascript. - person user2365917; 20.05.2013
comment
Вам не нужно изменять скриптлет. В событии onchange вам просто нужно сделать Ajax-запрос к сервлету с вашими новыми значениями. - person me_digvijay; 20.05.2013
comment
Как я могу сделать запрос ajax. Потому что я новичок в ajax. И во время работы нужно добавлять какие-либо файлы jar для запуска ajax? - person user2365917; 20.05.2013
comment
@ user2365917: Ajax можно просто сделать с помощью JavaScript. Ничего не нужно. Все делается на стороне клиента. На данный момент вы можете использовать метод api.jquery.com/jQuery.ajax для выполнения запроса ajax. . А вот очень хорошее руководство по AJAX developer.mozilla.org/en-US/docs /АЯКС - person me_digvijay; 20.05.2013
comment
@ user2365917: Всегда рад помочь. - person me_digvijay; 20.05.2013

Используйте кнопку отправки, чтобы получить выбранное значение на той же странице, и не нужно никаких функций, нет необходимости в отправке.

Например:

<form method="post" action="">
 <select id="selectBox" name="selurl">
<option value="1">Option #1</option>
<option value="2">Option #2</option>
</select>
<input type="submit" value="Submit" name="sub">
                                                //use scriplet tag 
<% String r=request.getParameter("sub");
if(r.equals("Submit"){
String s=request.getParameter("selurl");
System.out.println("selected value is "+s);
}%>
</form>
person 151291    schedule 06.02.2014

Ваш элемент select должен иметь атрибут имени, и вы должны использовать это имя в request.getParameter().

<select id="selectBox" name="selurl"">
   <option value="1">Option #1</option>
   <option value="2">Option #2</option>
</select>


String val = request.getParameter("mySelect");

РЕДАКТИРОВАТЬ:

Если вы хотите, чтобы запрос сервера выполнялся в событии onchange элемента select, вы должны использовать Ajax.

Используя jQuery,

$.post('SampServlet', {selectedValue: selectedValue}, function(data) {
//Update view
});
person c.P.u1    schedule 20.05.2013
comment
Вы пропустили name="selurl"? - person Ravi K Thapliyal; 20.05.2013
comment
Да.. Я обновил его.. Но после выбора значения в моем скриптлете он дает мне нулевое значение. Пожалуйста, помогите мне. - person user2365917; 20.05.2013
comment
Мне нужно это значение для отправки сервлету и получения сведений о соответствующей опции (выбранной опции). - person user2365917; 20.05.2013
comment
Разве это невозможно без jQuery (AJAX). Поскольку у меня нет знаний о ajax. Пожалуйста, помогите мне с использованием javascript и jsp - person user2365917; 20.05.2013
comment
Возможно. Вы можете иметь скрытый элемент ввода в своей форме, установить его значение при изменении и отправить форму с помощью form.submit(); - person c.P.u1; 20.05.2013
comment
Не могли бы вы предоставить мне образец строки. Я новичок в jsp. Пожалуйста, помогите мне. Просто дайте мне, как это сделать. - person user2365917; 20.05.2013
comment
В вашей форме добавьте <input type="hidden" name="someName"/>. Измените свой changeFunc(), чтобы установить скрытые someName.value = selectedValue; и document.forms[0].submit(); - person c.P.u1; 20.05.2013
comment
@ c.P.u1 Зачем добавлять скрытое поле, если значение, которое хочет ОП, уже отправлено <select> с именем selurl? - person Ravi K Thapliyal; 20.05.2013
comment
@Ravi Thapliyal, извини, братан, я думал, что он хотел, чтобы пользовательское поле было отправлено на сервер. - person c.P.u1; 20.05.2013

Вам не хватает кнопки <submit>.

<form method="post" action="SampServlet">
  <select id="selectBox" name="selurl" onchange="changeFunc();">
   <option value="1">Option #1</option>
   <option value="2">Option #2</option>
  </select>
  <input type="submit" /> <!-- MISSING!! -->
</form>

Добавьте кнопку и нажмите на нее, чтобы отправить форму вашему сервлету с выбранным значением, отправленным как selurl. Обратите внимание, что атрибут action вашей формы указывает на SampServlet, который, похоже, является сервлетом. Для jsps у нас обычно есть что-то вроде action="page.jsp" в форме.

EDIT:
Если вы хотите автоматически публиковать форму, когда пользователь выбирает значение из раскрывающегося списка, просто установите для onchange значение: (тогда вам даже не понадобится кнопка <submit>)

onchange="this.form.submit()"
person Ravi K Thapliyal    schedule 20.05.2013
comment
Я не собираюсь отправлять. Просто я хочу выбрать вариант. И когда я выбираю один вариант, данные, связанные с этим параметром, должны быть напечатаны в браузере из получения данных из базы данных. Я следую MVC. Так что в моем jsp мне нужно чтобы отправить этот выбранный параметр в сервлет. Который получит данные из javabean (база данных) и вернется в jsp. Затем jsp отобразит его. Это моя задача. Но я не могу получить выбранное значение в jsp. - person user2365917; 20.05.2013
comment
JSP — помощник на стороне сервера. Скриптлеты JSP <% %> никогда не будут выполняться на стороне клиента, то есть без отправки. Если приложение не требует отправки, вы должны использовать Ajax/jQuery. Но помните, что это вызовет сервлет, который будет общаться с БД и возвращать ответ, который вы затем сможете использовать ТОЛЬКО через Javascript. На мой взгляд, это нормально, но ваш блок кода JSP не может обработать этот ответ сейчас, поскольку он был получен на стороне клиента, а не на стороне сервера. - person Ravi K Thapliyal; 20.05.2013
comment
Если я использую submit() после выбора, решена ли моя проблема? - person user2365917; 20.05.2013
comment
Да, вы увидите выбранное значение в журнале консоли вашего Tomcat (поскольку вы использовали System.out). Для печати на веб-странице просто используйте <p>The selected value is <%= request.getParameter("selurl") %></p> (Обратите внимание, что в блоке ‹%= %› нет точки с запятой.) Также action вашей формы должен указывать на этот jsp-файл, чтобы он получал данные публикации. - person Ravi K Thapliyal; 20.05.2013
comment
Тогда какое событие я должен использовать в своем ‹select› onchange или onSubmit. Я прочитал в одной статье, что select не должен включать onClick или onsubmit. Если я использую кнопку отправки, я должен использовать onsubmit. Как? - person user2365917; 20.05.2013
comment
Каков ваш вариант использования? Что должно произойти, когда пользователь выбирает определенный вариант? Это поможет нам предположить, имеет ли здесь смысл использовать Ajax или отправку формы. Лучше обновите это в своем вопросе. Помог бы и всем новым людям, которые видят ваш вопрос. - person Ravi K Thapliyal; 20.05.2013
comment
В раскрывающемся списке моего приложения должен быть список доступных категорий из базы данных. Таким образом, мой ListServlet получает данные из java bean, который берет из базы данных и помещает их в список. И пересылает список и запрос на просмотр.jsp. Этот jsp отображает эти параметры в виде раскрывающегося списка. Из выпадающего списка пользователь выбирает один вариант, скажем, фрукты. Затем мой jsp должен взять выбранный вариант фруктов и перенаправить фрукты, т. Е. Выбранное значение другому сервлету, например, FruitServlet.fruitsServlet обрабатывает и отправляет список фруктов в jsp для отображения. Пожалуйста, помогите мне. GetParameter is дающий ноль. - person user2365917; 20.05.2013
comment
В раскрывающемся списке jsp, где у вас есть форма, установите action на fruitsServlet и добавьте кнопку submit. Это сделает выбранное значение доступным для fruitsServlet через request.getParameter(selurl); Теперь в fruitServlet.doPost() извлеките список фруктов, которые вы хотите отобразить из БД на основе selurl. После извлечения установите этот список с помощью request.setAttribute(fruitsList,listOfFruits); в сервлете перед пересылкой запроса на ваш окончательный jsp. Затем ваш окончательный jsp просто сделает foreach(String fruit: request.getAttribute(fruitsList)) для отображения всех фруктов пользователю. - person Ravi K Thapliyal; 20.05.2013
comment
Спасибо. Но я сомневаюсь, что все это присутствует только в одном jsp.ie, view.jsp. Здесь проблема заключается в том, чтобы впервые получить детали из ListServlet, чтобы создать раскрывающийся список. Я использую форму action=ListServlet и получаю list. Теперь, когда пользователь выбирает один вариант, как я могу установить форму action=fruitsServlet на той же странице jsp. Я хочу использовать только один jsp (view.jsp) - person user2365917; 20.05.2013
comment
Затем сделайте сообщение в том же ListServlet (хотя реальные приложения Word не работают с одним .jsp; если вас учат, что это MVC, то это неправильно!) и в doPost() сделайте if-else на selurl. Если это null, вы выбираете варианты, иначе вы обрабатываете свой список фруктов и перенаправляете на тот же view.jsp. Сделайте аналогичный if-else и в view.jsp. Если listOfFruits равно нулю, параметры отображения в противном случае показывают список переработанных фруктов. Простой! - person Ravi K Thapliyal; 20.05.2013
comment
Спасибо. Ваши предложения были очень полезными. Я попытаюсь использовать еще один jsp, чтобы следовать mvc. - person user2365917; 20.05.2013