免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2150 | 回复: 0
打印 上一主题 下一主题

Struts2 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-18 11:51 |只看该作者 |倒序浏览
Struts2


第一种:在struts2 action中弹出Js脚本提示信息

让action实现ServletResponseAware接口,同时实现其setServletResponse() 方法

Java代码

  1. import org.apache.struts2.interceptor.ServletResponseAware;
  2. public class StudentAction extends ActionSupport implements ServletResponseAware{
  3.      private javax.servlet.http.HttpServletResponse response;

  4.      public String addStudent() throws IOException{
  5.              response.setContentType("text/html;charset=UTF-8");
  6.               response.setCharacterEncoding("UTF-8");//防止弹出的信息出现乱码
  7.              PrintWriter out = response.getWriter();
  8.            studentDAO=new StudentDAO();
  9.           flag=studentDAO.addStudent(stu);
  10.         if(flag){      
  11.                  out.print("<script>alert('添加成功!')</script>");
  12.                  out.print("<script>window.location.href='http://ykdreaming.blog.163.com/blog/stuaction.action'</script>");
  13.                  out.flush();
  14.                  out.close();
  15.                  return null;
  16.     }else{
  17.        return "error";
  18.     }
  19.     }

  20. }

  21. // 获得HttpServletResponse对象
  22. public void setServletResponse(HttpServletResponse response) {
  23.    this.response = response;
  24. }
复制代码
------------------------------------------------------------------------------------------------------------------------------
第二种:把错误信息放入request里面,然后在页面上判断此信息是否存在,存在的话就弹出

最近在用Struts2+Spring+Hibernate主流框架开发项目,其中有部分界面表单提交结果的处理问题,之前一直都是通过 struts.xml配置指定的返回页面,在页面上显示出actionMessage,这样感觉不是很好,就想不要页面跳转,点击按钮处理后直接由js来 alert()出来,以前没有专门研究过,知道ajax可以实现,但那样每个提交时都要用ajax,太麻烦了,现在把我的实现方式记录下来:

首先,还是传统的Action,一般情况下,我们要返回信息可能会这样写:this.addActionMessage("提交成功!");这里做一点变化,用request.setAttribute("tipMessage", "提交成功!"); (tipMessage是自定义的)。

OK,然后在当前提交的页面里加上如下一段js:

Java代码

  1. <script type="text/javascript">
  2. var msg="${requestScope.tipMessage}";
  3. if(msg!=""){
  4. alert(msg);
  5. }
  6. </script>
复制代码
当然了,最后要记住struts.xml里同样要配置<result />的相关信息。
------------------------------------------------------------------------------------------------------------------------
第三种:
以前我们在action中写类似这样的代码
this.addActionMessage("提交成功!");

页面上:

Java代码

  1. <s:if test="hasFieldErrors()">  
  2. <s:iterator value="fieldErrors">  
  3. <s:iterator value="value">  
  4.     <script language="JavaScript">  
  5.      alert('<s:property/>');  
  6.     </script>     
  7. </s:iterator>   
  8. </s:iterator>   
  9. </s:if>
复制代码
这样当有field错误,就会弹出错误提示!当然不alert的话 也可以在外面之间套上div,控制输出格式
但问题来了,如果有多个field错误 就会不断地弹出消息窗口
如何把所有的错误消息全部显示在一个对话框中,每条错误消息占一行显示呢?

经过很长时间的摸索 问题终于给解决了 现在把它分享出来

在需要显示消息的页面加入include来引用message.jsp (或者把message.jsp的内容直接放在要显示消息的页面 )
<s:include value="message.jsp"></s:include>

最好把它放在页面最后 等页面全部加载后 再显示消息,要不然 加在前面的话就可能看到页面空白 消息提示显示完成后才显示页面.

message.jsp代码如下

Java代码

  1. <%@ page language="java" contentType="text/html; charset=GB18030"     pageEncoding="GB18030"%>  
  2. <%@ taglib prefix="s" uri="/struts-tags"%>  
  3. <html>  
  4.    <body>  
  5.          //fielderror  
  6.     <s:if test="hasFieldErrors()">  
  7.         <s:iterator value="fieldErrors">  
  8.             <s:iterator value="value" status="statu">  
  9.                 //field的错误消息是List 因此还需要迭代一次      
  10.                 <s:set name="index" value="#statu.index"/>  
  11.                 <s:set name="msg" value="#msg==null?'':#msg+  
  12.                 value.get(#request.index).toString()+'\\\n'"/>//关键代码  
  13.              </s:iterator>  
  14.         </s:iterator>  
  15.     </s:if>  

  16.          //actionerror  
  17.     <s:if test="hasActionErrors()">  
  18.         <s:iterator value="actionErrors">  
  19.                <script language="JavaScript">  
  20.                 alert("<s:property escape="false"/>")  
  21.                </script>  
  22.             </s:iterator>  
  23.     </s:if>  

  24.          //actionmessage  
  25.     <s:if test="hasActionMessages()">  
  26.         <s:iterator value="actionMessages">  
  27.             <script language="JavaScript">  
  28.                 alert("<s:property escape="false"/>")  
  29.             </script>  
  30.         </s:iterator>  
  31.      </s:if>  

  32.          //打印转换好格式的fielderror信息  
  33.     <s:if test="#msg.length()>0">  
  34.         <script language="JavaScript">  
  35.             alert("<s:property escape='false' value='#msg'/>")  
  36.         </script>  
  37.     </s:if>  
  38.     </body>  
  39. </html>  
复制代码
另外还有一种方法直接在script代码中嵌入struts2标签:

view plaincopy to clipboardprint?
struts2.0弹出验证
Java代码
  1.   
  2. 1.<!--用javascript验证 -->      
  3. 2.<s:if test="hasFieldErrors()">      
  4. 3.   <script language="JavaScript">     
  5. 4.     var msg = '';      
  6. 5.     <s:iterator value="fieldErrors">        
  7. 6.       <s:iterator value="value">        
  8. 7.            msg=msg+'<s:property/>'+'\n';      
  9. 8.       </s:iterator>         
  10. 9.     </s:iterator>      
  11. 10.     alert(msg);      
  12. 11.   </script>           
  13. 12.</s:if>  
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP