Как сохранить пользовательские переменные в запросе в приложении Struts на Java? - PullRequest
0 голосов
/ 22 декабря 2011

Я использую Struts 1.2 и J2EE 1.4.Я довольно новичок в Struts и Java, так что, надеюсь, есть простое решение для моей проблемы.У меня есть страница, настроенная так:

<div class="success">
    HTML for success
</div>
<div class="error">
    <p>We are experiencing technical difficulties at this time. Please try your request again later.</p>
</div>
<div id="contact-form-block">
    <html:form action="/reg" id="contactform">

    <br /><html:text property="firstName"/><html:errors property="firstName"/>
        <p><input type="image" src="images/reset_btn.png" id="reset" name="reset" alt="Reset" /><input type="image" src="images/submit_btn.png" id="submit" name="submit" alt="Submit" /></p>
    </div>

</html:form>
</div>

Изначально успехи, ошибки и контакты с нами - все скрыто.У меня есть контактная форма, отображаемая при клике в модальном диалоговом окне, например:

$('.success, .error, .success_header, .error_header').hide();
$('form#contactForm').show();

Итак, в своем действии я хочу иметь возможность отправлять все обратно на один и тот же вход forward независимо от того,были ли ошибки валидации или нет. НО Я хочу проверить на странице jsp в jQuery, чтобы проверить, какой диалог должен отображаться:

  1. Диалог успеха ИЛИ
  2. Диалог с нами с ошибками

Вот мое действие:

if ("reg".equalsIgnoreCase(contactUsForm.getAction())) {            

        ActionMessages errors = getErrors(request);

        errors = validate(contactUsForm);

        if (errors.isEmpty()) {

           //Save some variable to the request/response to say that registration was successful

        } else {
             //save something to say that registration was not successful
            saveErrors(request, errors);
        }
    }
    return actionForward;

Есть ли способ установить переменную в Action, которая можетбыть найденным на странице jsp после вызова ActionForward.Желательно доступен через jQuery в функции $(document).ready?

Ответы [ 2 ]

1 голос
/ 22 декабря 2011

Я не уверен, правильно ли я понял вопрос, но если вы имеете в виду, есть ли способ передать переменные из класса Action в JSP, тогда да.

В классе Action перед оператором return установите переменную для контекста запроса, как показано ниже:

 request.setAttribute("successfulRegistration", "true");

Всегда помните, что JSP компилируется на стороне сервера, а затем любой HTML-код добавляется вответ до того, как он достигнет браузера, который будет обработан или обработан javascript.Так,

В примере JSP:

<script type="text/javascript>
var success = <% (String) request.getAttribute("successfulRegistration"); %>
</script>

из, поскольку переменная является строкой, ее можно сократить до:

<script type="text/javascript">
var success = <%=request.getAttribute("successfulRegistration")%>
</script>

Переменная успеха вjavascript уже будет иметь свою переменную, назначенную во время компиляции JSP на стороне сервера, прежде чем он достигнет браузера.

JSP могут обмениваться данными с классами Action через контексты запроса, сеанса и приложения.

Request - request.getAttribute(...)
Session - request.getSession().getAttribute(...)
Application - application.getAttribute(...)

Аналогично, в классе Action их можно установить - доступ к контексту приложения осуществляется классом ServletContext.

1 голос
/ 22 декабря 2011

Вы бы использовали обычные механизмы спецификации Struts и / или сервлета.

Вы можете просто проверить, есть ли ошибки или нет; они хранятся в запросе под ключом "org.apache.struts.action.ERROR"; вам не нужно добавлять что-то конкретное, но если вы действительно хотите, вы можете.

Я предпочитаю, чтобы данные не в форме сохранялись как атрибут запроса:

request.setAttribute("haveErrors", true); // Or false, obviously.

Затем вам нужно получить данные из запроса в вашем JSP и интерпретировать как JavaScript:

$(function() {
    // Use normal JSP EL; haveErrors should display as a bare string, 
    // which is valid JS. Can modify as necessary if need be.
    var haveErrors = ${haveErrors};
});
...