ajax如何获取struts2的action的返回信息?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ajax如何获取struts2的action的返回信息?相关的知识,希望对你有一定的参考价值。

我是这样写的如下,不知是不是这样写的。
public String check() throws Exception

//获取HttpServletRequest对象request

HttpServletRequest request=ServletActionContext.getRequest();

//获取HttpServletResponse对象response
HttpServletResponse response=ServletActionContext.getResponse();

response.setContentType("text/html;charset=UTF-8");

//获取PrintWriter对象out,
PrintWriter out=response.getWriter();

System.out.println(user.getUserName());
User u=userService.getUserByName(user.getUserName());

if(u==null)

//输出jsp页面
out.println("<html><body>恭喜您用户名可用!</body></html>");

return null;

else

out.println("<html><body>对不起,用户名已存在!</body></html>");
return null;



但是,输入用户名为中文时无法接收参数

参考技术A 你的代码可以向前台输出结果。貌似你说的不是返回值的问题,而是中文乱码的问题?
如果是中文乱码的问题,就用以下方式解决:
输入中文的时候,ajax的提交方式,改为post,然后把中文参数用encodeURI(encodeURI(params))做一下转码,然后后台decode,就可以规避提交的中文乱码问题。
参考技术B 方法里不用写成String ,写成void 不返回任何东西,在 out.println("<html><body>恭喜您用户名可用!</body></html>");,前台的ajax部分 直接接受返回过来的msg信息,懂了么....本回答被提问者采纳

struts2 action在前台显示信息提示

一、前端解决

1、使用javascript代码验证,为空不允许提交。就算验证成功也不是表单提交成功了,只是肯定前端传来的数据是正确的。

2、使用ajax方式,action处理完成返回一个成功消息就可以了。失败就返回失败消息。(每个提交时都要用ajax,太麻烦)

 

二、后台解决

3、使用struts2自带功能。判断完参数后,如果为空,return到一个错误页面error,正常的话return到一个提交成功页面success。

第一种:在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=‘http://ykdreaming.blog.163.com/blog/stuaction.action‘</script>");
             out.flush();
             out.close();
             return null;
        }else{
           return "error";
        }
    }
}

// 获得HttpServletResponse对象
public void setServletResponse(HttpServletResponse response) {
   this.response = response;
}
View Code

第二种:把错误信息放入request里面,然后在页面上判断此信息是否存在,存在的话就弹出

技术图片
// action:
request.setAttribute("tipMessage", "提交成功!");// (tipMessage是自定义的)

// 在当前提交的页面里加上如下一段js:
<script type="text/javascript">
var msg="${requestScope.tipMessage}";
if(msg!=""){
alert(msg);
}
</script>
View Code

第三种 action 自带错误提示功能(addActionMessage)

// action
this.addActionMessage("提交成功!");

// 页面上:
<s:if test="hasActionMessages()">  
        <s:iterator value="actionMessages">  
            <script language="JavaScript">  
             alert(‘<s:property/>‘);  
            </script>                 
    </s:iterator>   
</s:if>

改进:在需要显示消息的页面加入include来引用message.jsp

技术图片
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>  
View Code

4、XML配置校验(表单验证,页面上不用加html代码显示错误信息)

拦截器和Action放一个包下
起名规则:1、UserAction-validation.xml (Action类名-validation.xml)对这个action中所有方法进行验证
         2、UserAction-user_add-validation.xml (Action类名-action名-validation.xml)对指定的方法进行验证

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
          "-//Apache Struts//XWork Validator 1.0.3//EN"
          "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
    <field name="loginName">
        <field-validator type="requiredstring">
            <message>用户名不能为空</message>
        </field-validator>

        <field-validator type="stringlength">
            <param name="maxLength">12</param>
            <param name="minLength">3</param>
            <message>用户名长度必须在${minLength}到${maxLength}之间</message>
        </field-validator>
    </field>
    <field name="loginPwd">
        <field-validator type="requiredstring">
            <message>密码不能为空</message>
        </field-validator>
    </field>
</validators>

5、注解配置校验

 

来源: https://blog.csdn.net/zhang527836447/article/details/11796937

以上是关于ajax如何获取struts2的action的返回信息?的主要内容,如果未能解决你的问题,请参考以下文章

jsp使用jquety $.ajax()传参数。struts2 action 如何接收所传的值

struts2,ajax,json传json给Action中的类对象,并返回需要的数据

extjs ajax请求与struts2进行交互

struts2 action在前台显示信息提示

Struts2+Jquery实现ajax并返回json类型数据

Struts2与jQuery.ajax()的结合