Сохранение отправленного JSP формирует данные

Если у Вас нет определенной причины не к, просто используйте обычный объект. На свойства объектов в JavaScript можно сослаться с помощью синтаксиса стиля хеш-таблицы:

var hashtable = {};
hashtable.foo = "bar";
hashtable['bar'] = "foo";

И foo и bar на элементы можно теперь тогда сослаться как:

hashtable['foo'];
hashtable['bar'];
// or
hashtable.foo;
hashtable.bar;

, Конечно, это действительно означает, что Ваши ключи должны быть строками. Если они не строки, они преобразовываются внутренне в строки, таким образом, это может все еще работать, YMMV.

7
задан skaffman 18 December 2009 в 14:24
поделиться

3 ответа

В 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") %>" />
2
ответ дан 7 December 2019 в 03:19
поделиться

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.

6
ответ дан 7 December 2019 в 03:19
поделиться

Если я правильно понимаю проблему (там большое "если"), то у вас есть ФОРМ, который имеет метод POST и ДЕЙСТВИЕ, направленное непосредственно на удаленный сервер. Когда пользователь нажимает кнопку "Отправить", браузер не вовлекает ваш хост в эту операцию, данные передаются получателю "ДЕЙСТВИЯ". Это ограничивает ваши возможности по осуществлению обратного вызова с удаленным сервисом (возможно, вне вашего контроля), настройка локального прокси-сервлета для перехвата данных и пересылки POST вместе с ним предполагаемому получателю (что сделает POST исходящим от сервера, а не от клиента (это может вызвать проблемы)), или использование некоторого шаблона AJAX для отправки данных формы в два места вместо одного, который диктует тэг FORM.

Помимо этого, вам понадобится какая-нибудь форма локальной персистентности вроде базы данных или файла.

Я вообще помог?

.
1
ответ дан 7 December 2019 в 03:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: