2011-12-22 41 views
0

我正在使用Struts 1.2和J2EE 1.4。我對Struts和Java非常陌生,所以希望有一個簡單的解決方案來解決我的問題。我有這樣一個頁面設置:如何在Java中的Struts應用程序中將自定義變量保存到請求中?

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

最初的成功,錯誤和聯繫我們divs都隱藏起來。我的聯繫方式在這樣一個模式對話框顯示在點擊:

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

所以,在我的行動,我希望能夠發送一切恢復到相同的輸入forward不管是否有驗證錯誤與否。 我想在jQuery的JSP頁面上進行檢查,檢查,看看應顯示的對話框:

  1. 成功對話框OR
  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,調用ActionForward後可在jsp頁面中檢索到。最好通過jQuery在$(document).ready函數中訪問?

+0

建議:與struts2一起使用,這與Struts1有很大不同,最終您將切換到Struts2。 Struts2不需要任何Struts1的經驗,因此學習它很容易。 – 2011-12-22 19:28:04

+0

@XCoder我希望我能。不幸的是,我不能決定我可以使用哪種技術。 – Rondel 2012-01-03 20:27:16

回答

1

您將使用普通的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}; 
}); 
+0

謝謝。這應該做的伎倆。檢查錯誤的'request'可能更有意義,但'setAttribute'將幫助我保存更多我想要的東西。 – Rondel 2011-12-22 15:20:35

+0

@Rondel我也推薦使用常量作爲鍵值;只是想保持簡單。有些人也將所有的觀點放在行動表格中;這是一個偏好問題。對不起,你必須使用這種古老的技術。 – 2011-12-22 15:21:51

1

我不知道我是否理解了這個問題,但是如果你的意思是,有沒有辦法讓你將Action類中的變量傳遞給JSP,那麼是的。

在return語句之前Action類設置一個變量來像下面的請求上下文:

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類訪問。

+0

謝謝。這有助於 – Rondel 2011-12-22 18:02:41

相關問題