`

struts2 message 用js提示输出

阅读更多

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

让action实现ServletResponseAware接口,同时实现其setServletResponse()方法
import org.apache.struts2.interceptor.ServletResponseAware;
public class StudentAction extends ActionSupport implements ServletResponseAware{
     private javax.servlet.http.HttpServletResponse response;

     public String addStudent() throws IOException
     {
        response.setContentType("text/html;charset=UTF-8");
        response.setCharacterEncoding("UTF-8");// 防止弹出的信息出现乱码
        PrintWriter out = response.getWriter();
        studentDAO = new StudentDAO();
        flag = studentDAO.addStudent(stu);
        if (flag)
        {
            out.print("<script>alert('添加成功!')</script>");
            out.print("<script>window.location.href='stuaction.action'</script>");
            out.flush();
            out.close();
            return null;
        }
        else
        {
            return "error";
        }
     }

}

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

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

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

OK,然后在当前提交的页面里加上如下一段js:
<script type="text/javascript"> 
var msg="${requestScope.tipMessage}";
if(msg!=""){
alert(msg);
}
</script>
当然了,最后要记住struts.xml里同样要配置<result />的相关信息。
------------------------------------------------------------------------------------------------------------------------------ 
第三种:
以前我们在action中写类似这样的代码
this.addActionMessage("提交成功!");

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

PS:

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

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

message.jsp代码如下 

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

         //actionerror   
    <s:if test="hasActionErrors()">   
        <s:iterator value="actionErrors">   
               <script language="JavaScript">   
                alert("<s:property escape="false"/>")   
               </script>   
            </s:iterator>   
    </s:if>   

         //actionmessage   
    <s:if test="hasActionMessages()">   
        <s:iterator value="actionMessages">   
            <script language="JavaScript">   
                alert("<s:property escape="false"/>")   
            </script>   
        </s:iterator>   
     </s:if>   

         //打印转换好格式的fielderror信息   
    <s:if test="#msg.length()>0">   
        <script language="JavaScript">   
            alert("<s:property escape='false' value='#msg'/>")   
        </script>   
    </s:if>   
    </body>   
</html>  

另外还有一种方法直接在script代码中嵌入struts2标签:

view plaincopy to clipboardprint?
struts2.0弹出验证    
<!--用javascript验证 -->    
<s:if test="hasFieldErrors()">    
   <script language="JavaScript">   
     var msg = '';     
     <s:iterator value="fieldErrors">      
       <s:iterator value="value">      
            msg=msg+'<s:property/>'+'\n';    
       </s:iterator>        
     </s:iterator>    
     alert(msg);    
   </script>         
</s:if>

分享到:
评论

相关推荐

    struts2如何实现弹出action返回的错误信息

    这种方法涉及到直接在Action中使用`response.getWriter()`来输出JavaScript代码,从而触发浏览器的弹窗警告。 ```java PrintWriter outjs = response.getWriter(); outjs.print("&lt;script&gt;alert('成功');window....

    stuts2和extjs结合实例

    - 观察控制台输出以及弹出的信息提示,确认登录逻辑正确执行。 #### 总结 通过上述步骤,我们成功实现了Struts2与ExtJS的集成。此过程不仅涉及了模型层、控制层的定义,还涵盖了配置文件的编写以及前端页面的设计...

    最新Java面试宝典pdf版

    2. 用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。 83 3、HTML 的 form 提交之前如何验证数值文本框的内容全部为数字? 否则的话提示用户并终止提交? 84 4、...

    java面试题大全(2012版)

    2. 用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。 83 3、HTML 的 form 提交之前如何验证数值文本框的内容全部为数字? 否则的话提示用户并终止提交? 84 4、...

    java面试宝典2012

    2. 用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。 90 3、HTML 的 form 提交之前如何验证数值文本框的内容全部为数字? 否则的话提示用户并终止提交? 91 4、...

    Java面试宝典2012新版

    2. 用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。 83 3、HTML 的 form 提交之前如何验证数值文本框的内容全部为数字? 否则的话提示用户并终止提交? 84 4、...

    JAVA面试宝典2010

    2. 用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。 83 3、HTML 的 form 提交之前如何验证数值文本框的内容全部为数字? 否则的话提示用户并终止提交? 84 4、...

    Java面试宝典-经典

    2. 用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。 83 3、HTML 的 form 提交之前如何验证数值文本框的内容全部为数字? 否则的话提示用户并终止提交? 84 4、...

    Java面试宝典2012版

    2. 用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。 83 3、HTML 的 form 提交之前如何验证数值文本框的内容全部为数字? 否则的话提示用户并终止提交? 84 4...

Global site tag (gtag.js) - Google Analytics