簡體   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