JavaScript с JSP - PullRequest
       10

JavaScript с JSP

0 голосов
/ 20 августа 2009

Хорошо, это продолжение моих дерьмовых попыток использования клиентских сценариев вместе с серверными элементами.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

<form name="test" action="test.jsp" method="post" enctype="multipart/form-data">
<select name="harish" onchange=callme();>
<option value="1">1</option>
<option value="2">2</option>
</select>
<script> 
var jsvar="Hello";
function callme()
{
    alert(jsvar);
    jsvar=document.getElementById("harish").value;
    alert(jsvar);
}
</script> 
 <% 
 String s=(String)("<script>document.writeln(jsvar)</script>").toString();
 out.println(s.equals("Hello"));
 if(!(s.equals("Hello")))
 {
 String jspvar="<script>document.writeln(jsvar)</script>";
 out.println("jspvar"+jspvar);
 session.setAttribute("test",jspvar);
 }
  %>
</form>


</body>
</html>

Теперь я пытаюсь установить выбранное значение в качестве переменной сеанса. Но мне плохо, что значение из javascript неправильно сидит в переменной jsp / java и поэтому мое условие if(!(s.equals("Hello"))) не удается. Может ли кто-нибудь помочь мне здесь ...

Обновление:

Может ли решение для этого вопроса быть ниже

Иметь HTML-страницу с двумя фреймами. Пусть первая страница содержит все значения javascript, которые вы хотите заполнить. Вторая страница (скрытая) рамки на самом деле делает свое дело. Это на самом деле JSP. При нажатии кнопки (при любом действии на первой странице) на первой странице укажите свое местоположение на скрытом кадре (2-я страница), выполните проверки / преобразования и заполните переменную первой страницы, используя перекрестный кадр JAVASCRIPT.

Ответы [ 2 ]

2 голосов
/ 20 августа 2009

мое состояние if (! (S.equals ("Hello"))) не выполняется

Это потому что это:

String s=(String)("<script>document.writeln(jsvar)</script>").toString();
out.println(s.equals("Hello"));

... почти так же, как писать:

out.println("this".equals("that"));

Это всегда будет ложью.

Теперь я пытаюсь установить выбранное значение в качестве переменной сеанса.

Чтобы установить переменную в сеансе, вам нужно отправить форму на сервер (игнорируя методы AJAX и т. Д.). Как я уже упоминал здесь , для использования multipart/form-data требуется анализатор MIME - в приведенной ниже форме используется значение по умолчанию enctype.

Эта форма, когда вы выбираете опцию из выпадающего списка, отправляет форму на сервер. Каждый раз, когда JSP запускается, он использует тесты скриптлета <% ... %>, чтобы проверить, был ли опубликован параметр "harish". Если это так, он помещает его в сеанс. Выражение <%= ... %> используется для отображения текущего значения сеанса.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- header removed for clarity -->
<body>
<form id="test" name="test" action="test.jsp" method="post"><select
  name="harish" onchange="document.getElementById('test').submit();">
  <option value="select">select an option</option>
  <option value="1">1</option>
  <option value="2">2</option>
</select></form>
<%
  //see if a parameter was sent from page; "harish"==name attr on select
  String value = request.getParameter("harish");
  if (value != null) {
    //store it in session
    session.setAttribute("test", value);
  }
%>
<%="harish=" + session.getAttribute("test")%>
</body>
</html>

Предполагается, что приведенная выше страница test.jsp - что страница отправляется обратно самой себе. Если нет, вам нужно переместить скриптлет и выражение в test.jsp.

0 голосов
/ 20 августа 2009

Java оценивается на стороне сервера, поэтому в переменной s вы всегда найдете

<script>document.writeln(jsvar)</script>

Javascript оценивается на противоположной стороне, то есть в браузере клиента, поэтому ваш метод не работает (я тоже много раз этим занимался ^^)

Вы можете отправить форму в тот же jsp, где находится этот код, и взять результат из данных POST, для этого вы будете использовать скриптлет. Если я правильно помню, вы могли бы использовать

request.getParameter("PARAMETER_NAME")

Так что просто добавьте имя jsp, где находится этот код, к действию формы и приведенному выше коду, чтобы получить выбранное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...