如果前台页面触发了一个action,大部分情况下,下一步是导向另外一个action或者另外一个页面。
如果我们需要在触发action之后返回文本信息给前台页面,例如登陆时密码错误,或者用户名不存在,就可以如下处理:
第一种方案:
在action中嵌入javascript代码,获取response然后write:
而获取request和response有不同的方式,我知道的就有两种,
第一种
ActionContext context=ActionContext.getContext();
HttpServletRequest r = (HttpServletRequest) context.get(ServletActionContext.HTTP_REQUEST);
HttpServletResponse response = (HttpServletResponse) context.get(ServletActionContext.HTTP_RESPONSE);
第二种:
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse re = ServletActionContext.getResponse();
获取了response之后就可以往页面写javascript了:
PrintWriter out = response.getWriter();
out.print("<script>alert('密码错误!')</script>");
out.flush();
out.close();
第二种方案:
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("tipMessage", "密码错误!");
然后在页面上加上js代码:
<script>
var msg="${requestScope.tipMessage}";
if(msg!=""){
alert(msg);
}
</script>
个人觉得第二种方案更好,达到了代码的分离,第一种方案中将js代码写在了后台的java代码中,感觉比较混乱,耦合性过强。
在此附带EL表达式的基本知识:
EL表达式为了使jsp写起来更加简单,http://blog.csdn.net/qwerasdf123/article/details/4189889 这篇博客讲得很清楚。
而上面代码中的requestScope就相当于HTTP协议中的request。