Если у Вас нет определенной причины не к, просто используйте обычный объект. На свойства объектов в JavaScript можно сослаться с помощью синтаксиса стиля хеш-таблицы:
var hashtable = {};
hashtable.foo = "bar";
hashtable['bar'] = "foo";
И foo
и bar
на элементы можно теперь тогда сослаться как:
hashtable['foo'];
hashtable['bar'];
// or
hashtable.foo;
hashtable.bar;
, Конечно, это действительно означает, что Ваши ключи должны быть строками. Если они не строки, они преобразовываются внутренне в строки, таким образом, это может все еще работать, YMMV.
В JSP такого рода вещи обычно решаются с помощью javabean-компонента для хранения значений формы, а затем с помощью тега jsp: useBean. Например, вы должны создать следующий javabean:
package com.mycompany;
public class FormBean {
private String var1;
private String var2;
public void setVar1(String var) { this.var1 = var; }
public String getVar1() { return this.var1; }
public void setVar2(String var) { this.var2 = var; }
public String getVar2() { return this.var2; }
}
В вашей форме jsp вы должны использовать тег useBean, и значения полей вашей формы будут получать свои значения из bean-компонента:
<jsp:useBean id="formBean" class="com.mycompany.FormBean" scope="session"/>
...
...
<input type="text" name="var1" value="<%=formBean.getVar1()%>" />
В вашем jsp данные формы отправляются в (затем перенаправляет обратно), у вас будет следующий код, который помещает данные опубликованной формы в компонент.
<jsp:useBean id="formBean" class="com.mycompany.FormBean" scope="session"/>
<jsp:setProperty name="formBean" property="*"/>
Другой вариант - просто вставить данные формы в сеанс на странице сохранения:
String var1 = request.getParameter("var1");
String var2 = request.getParameter("var2");
session.setAttribute("var1", val1);
session.setAttribute("var2", val2);
...
и указать на них ссылку в форме (нулевая проверка опущена):
<input type="text" name="var1" value="<%= session.getAttribute("var1") %>" />
Best what you can do is to submit to your own servlet which in turn fires another request to the external webapplication in the background with little help of java.net.URLConnection
. Finally just post back to the result page within the same request, so that you can just access request parameters by EL. There's an implicit EL variable ${param}
which gives you access to the request parameters like a Map
wherein the parameter name is the key.
So with the following form
<form action="myservlet" method="post">
<input type="text" name="foo">
<input type="text" name="bar">
<input type="submit">
</form>
and roughly the following servlet method
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
String foo = request.getParameter("foo");
String bar = request.getParameter("bar");
String url = "http://external.com/someapp";
String charset = "UTF-8";
String query = String.format("foo=%s&bar=%s", URLEncoder.encode(foo, charset), URLEncoder.encode(bar, charset));
URLConnection connection = new URL(url).openConnection();
connection.setUseCaches(false);
connection.setDoOutput(true); // Triggers POST.
connection.setRequestProperty("accept-charset", charset);
connection.setRequestProperty("content-type", "application/x-www-form-urlencoded;charset=" + charset);
try (OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream(), charset)) {
writer.write(query);
}
InputStream result = connection.getInputStream();
// Do something with result here? Check if it returned OK response?
// Now forward to the JSP.
request.getRequestDispatcher("result.jsp").forward(request, response);
}
you should be able to access the input in result.jsp
as follows
<p>Foo: <c:out value="${param.foo}" /></p>
<p>Bar: <c:out value="${param.bar}" /></p>
Simple as that. No need for jsp:useBean
and/or nasty scriptlets.
Если я правильно понимаю проблему (там большое "если"), то у вас есть ФОРМ, который имеет метод POST и ДЕЙСТВИЕ, направленное непосредственно на удаленный сервер. Когда пользователь нажимает кнопку "Отправить", браузер не вовлекает ваш хост в эту операцию, данные передаются получателю "ДЕЙСТВИЯ". Это ограничивает ваши возможности по осуществлению обратного вызова с удаленным сервисом (возможно, вне вашего контроля), настройка локального прокси-сервлета для перехвата данных и пересылки POST вместе с ним предполагаемому получателю (что сделает POST исходящим от сервера, а не от клиента (это может вызвать проблемы)), или использование некоторого шаблона AJAX для отправки данных формы в два места вместо одного, который диктует тэг FORM.
Помимо этого, вам понадобится какая-нибудь форма локальной персистентности вроде базы данных или файла.
Я вообще помог?
.