繁体   English   中英

如何在Java中的Struts应用程序中将自定义变量保存到请求中?

[英]How can I save custom variables into the request in a Struts application in Java?

我正在使用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>

最初的成功,错误和联系我们的div都是隐藏的。 我在点击模式对话框时显示联系表格,如下所示:

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

因此,在我的Action中,我希望能够将所有内容发送回相同的输入forward无论是否存在验证错误。 但是我想检查jQuery中的jsp页面以检查应该显示哪个对话框:

  1. 成功对话框
  2. 带错误的contact-us对话框

这是我的行动:

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中设置一个变量,可以在调用ActionForward后在jsp页面中检索该变量。 最好通过jQuery在$(document).ready函数中访问?

您将使用普通的Struts和/或servlet规范机制。

您可以检查是否有错误; 它们存储在"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};
});

我不确定我是否理解正确的问题,但如果你的意思是,有没有办法让你把变量从Action类传递到JSP,那么是的。

在return语句之前的Action类中,将变量设置为请求上下文,如下所示:

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

永远记住,JSP在服务器端进行编译,然后在到达浏览器进行渲染或处理javascript之前,将任何HTML添加到响应中。 所以,

以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类访问应用程序上下文。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM