Struts 2对jsp的动作响应

时间:2014-04-10 11:45:09

标签: java jquery ajax struts2 action

我想在jsp页面上获取Action的HTTPServletResponse,但我不知道如何......

我在jsp上调用ajax:

jQuery.ajax({
url : 'actionURL',
type: "POST",
data : {input: "example"},
dataType: "html",
success: function(response) {
alert(response);
if (response == 1) {
jQuery("#message").html("done!");
}
}
});

我的行动课程:

public class MyAction implements ServletResponseAware {

public final String execute() throws IOException {

        String return_code = "1";

        try {

            something...

        } catch (Exception e) {
            return_code = "0";
        }

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

        return "success";
    }
}

如何只访问jsp上的return_code变量?因为现在在脚本中警告整个页面HTML代码作为响应...谢谢!

1 个答案:

答案 0 :(得分:1)

  1. 您的变量必须在类级别,使用Getter;
  2. 应该是camelCase(returnCode而不是return_code),并且可能是一个Integer,因为它包含一个数字;
  3. 不要在回复中写任何东西,Struts会为你做的;这是一个动作,而不是一个servlet;
  4. 永远不要吞下例外;

    public class MyAction implements ServletResponseAware {
    
        private Integer returnCode;
    
        public Integer getReturnCode(){
            return returnCode;
        }
    
        public final String execute() throws IOException {    
            try {
                /* do something... */
                returnCode = 1;
            } catch (Exception e) {
                e.printStackTrace();
                returnCode = 0;
            }    
            return "success";
        }
    }
    
  5. 在struts.xml中,将"success"结果映射到仅包含打印输出值的JSP:

    <%@ page contentType="text/html; charset=UTF-8"%>
    <%@ taglib prefix="s" uri="struts-tags.tld"%>    
    <s:property value="returnCode" />
    

    然后返回的JSP将是单个值。但这是不好的做法,很容易导致错误(例如额外的空格)。然后改变你的方法......

  6. 使用Struts2 JSON plugin设置returnCode作为root对象(记得将dataTypehtml更改为json