2011-12-22 44 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

相关问题