一般情况下我们Struts2都是返回一个页面(success/error/……),有没有想jsp样可以写成out.println("……")直接把信息打到界面呢(这样可以写js:alert();等)?struts2做表示层时,比如用户新增一条记录,我不想跳到一个提示成功/失败的页面,而是想在当前页弹出一个提示框:Js的alert();,在网上搜了一下:(http://www.javaeye.com/topic/305519),说是可以,但那里面的CoreAction是什么用的,在哪里?不知道。大家有没有做过类似的或是知道怎么解决这中需求的?

解决方案 »

  1.   

    我用ajax时不知怎的没反应出来还会继续调试,除了Ajax的方法:比如Struts.xml里配置什么
    <result-types>
    <result-type name="redirect-message" class="RedirectMessageResult"></result-type>
    </result-types>
    这样的(RedirectMessageResult类是自己写的,要继承org.apache.struts2.dispatcher.StrutsResultSupport类,如:www.javaeye.com/topic/305519)。
      

  2.   

    必然要使用到ajax技术..
    当前的要不就新打开一个窗口..提示一下..马上关闭也可以..<script>
    alert();
    window.close();
    </script>
      

  3.   

    不好意思,我不这么认为,利用页面的onload事件调用js,或是把js的调用写在jsp中form内的最后,从服务端返回一个值,jsp页面用hidden保存,在js中取这个值,如果是空字符串,则是第一次进入这个页面,如果保存成功,在服务端返回之前,为这个hidden赋值,比如“保存成功”之类的,这时页面上的js判断,不是空字串,将该字符串alert出来,当然服务端保存成功后forward依然指向本页面。
      

  4.   

    其实要是在Action中再写一个页面,然后页面只弹一个对话框,完了现实数据
    这样做没什么价值,就是一个提示嘛,要不统一定义提示页面,
    要不就用ajax,根据Action返回不同指定的值弹出不同的提示框,判断不是也挺简单的嘛!
    不知楼主是否满意……
      

  5.   

    1、action里写上:response.getWriter().write("alert(1122)");   然后这个action return null;
    2、在struts的配置文件里的result不要设置就可以了
      

  6.   

     哈哈
       我刚做完这样的模块,JS和服务器端通讯,用json吧,真的很好,功能也很强大。
      

  7.   


    还可以用ActionError去设置吧..然后在页面用一个s:actionerror组件就可以了吧,我就是这么来实现的
      

  8.   

    页面上加几句:<script>
    var errorMsg="${requestScope.errorMessage}";
    if(errorMsg!=""){
    alert(errorMsg);
    }
    </script>
    然后随便一个地方向request里存一个key为errorMessage的值(如:request.setAttribute("errorMessage","错误信息");)
    然后转发过来就行了
      

  9.   

    楼上的兄弟说的没错
    js里面是可以用el表达式的!
      

  10.   

    我用的是struts2.0,经过细致排查,找到原因,但还是没解决问题。 
    public String execute() 
        throws Exception 
      { //弹出信息 
    alertmessage("\u52a8\u6001\u5bc6\u7801\u8f93\u5165\u4e0d\u6b63\u786e"); 
    this.addFieldError("", "d"); 
        return INPUT;   } 
    /** 
    * 弹出提示信息 
    */ 
    private void alertmessage(String message){ PrintWriter out; 
    HttpServletResponse response=ServletActionContext.getResponse(); 
    response.setCharacterEncoding("utf-8"); 
    try { 
    out=response.getWriter(); 
    out.println(" <script type='text/javascript' >"); 
    out.println("alert('"+message+"');"); 
    out.println(" </script>"); 
    out.flush(); 
    } catch (IOException e) { 
    e.printStackTrace(); 


    发现,如果 return null的话,只弹出一次且是乱码,因为我response.setCharacterEncoding("utf-8");设成gbk的正常, 如果return INPUT,说明他返回到这个input页面又执行了一次alertmessage代码, 
    由于input页面编码是utf-8的,所以显示正常,问题就出在struts2的return 上面。哪位大虾了解struts2的啊,救命啊!!! 
      

  11.   

    其实可以用:
    HttpServletResponse response=ServletActionContext.getResponse();
    response.setCharacterEncoding("UTF-8");
    response.setContentType("text/html; charset=utf-8");
    PrintWriter out=response.getWriter();
    out.print("<script>alert('123');location='xxx.action';</script>");
    return null;
    这种方法
      

  12.   

    可这样返回到 登录页面out.print("<script>alert('对不起用户名或者密码错误,请重新登录');history.go(-1);</script>");