struts2 的 ajax 问题

jlpf 2009-02-16

我正在学习struts2,要做一个功能,
用Ext.Ajax.request({                       

                        url : 'deleteCategory.action',
                        params : {
                            categoryId : 'life'
                        },
                        success : function(obj) {
                           alert("success:"+obj.responseText);
                        },
                        failure : function() {
                            alert("failed:");
                        }
                    });

来发出请求,并等待返回结果, 问题是,struts的action能给我返回一个xml么? 用什么做呢,json可以么?

 

kyo100900 2009-02-16
struts2 当然可以给你返回一个你所要的xml,比如

public class CategoryAction extends ActionSupport{
    
    public void deleteCategory(){
         		HttpServletResponse response = ServletActionContext.getResponse();
		PrintWriter out = response.getWriter();
		out.print("删除成功");
		out.close();
    }

}
jlpf 2009-02-16
非常感谢,我是新人,还要好好学习啊。 
OuYangGod 2009-02-17
struts2的action的不可以用httpServletResponse向浏览器写的吧,应该生成一个文本格式的xml字串,返回类型用stream.
比如:
<result name="success" type="stream">
	<param name="contentType">text/xml</param>
	<param name="inputName">is</param>
</result>

is是action中的InputStream.
比如:
            ByteArrayOutputStream os=new ByteArrayOutputStream();
            os.write("<result>\n".getBytes());
            for(PrincipalHolder item : principalList)
            {   
                os.write("<principal>\n".getBytes());
                os.write(("<name>"+"<![CDATA["+item.getPrincipalName()+"]]>"+"</name>\n").getBytes());
                os.write(("<code>"+"<![CDATA["+item.getPrincipalCode()+"]]>"+"</code>\n").getBytes());
                os.write(("<oid>"+"<![CDATA["+item.getPrincipalOid()+"]]>"+"</oid>\n").getBytes());
                os.write(("</principal>\n").getBytes());
            }
            os.write("</result>".getBytes());
            is=new ByteArrayInputStream(os.toByteArray());
KimShen 2009-02-17
方法1 返回result type=plaintext
方法2 返回result type=xslt
方法3 返回result type=stream
stream对应一个JDOM的Xpath
3种方法对应不同情况使用
wuxi7227 2009-02-17
在下使用两种办法,一种result type ="json" ,action调用json plugin。 二,象一般action一样返回,只不过result是一个空白页,response里自己写JSON字符流
zonto 2009-02-17
转换成JSON很简单
1,导入jsonplugin.jar
2,将struts.xml中struts-default 改成json-default
3,返回类型改为<result name="json" type="json"/>
完成!
这样会将所有action中的getXXX()的方法 都转换成JSON数据
如果有不想转换的可在getXXX()方法前加@JSON(serialize=false)
jlpf 2009-02-17
谢谢各位的帮助,我尝试了三种办法,都能够实现:
1: 使用json plugin
2:     HttpServletResponse response = ServletActionContext.getResponse(); 
       PrintWriter out = response.getWriter(); 
       out.print("删除成功"); 
       out.close(); 

3:    <result name="success" type="stream"> 
      <param name="contentType">text/xml</param> 
      <param name="inputName">is</param> 
     </result> 

在次谢谢各位!!
qt03061127 2009-02-19
自己写一个RESULTTYPE:
public class XmlResultType extends StrutsResultSupport
...
    protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception{
    HttpServletResponse response = (HttpServletResponse) invocation.getInvocationContext().get(
                HTTP_RESPONSE);
    /*定义RESPONSE的返回类型*/
    response.setContentType(...);
    PrintWriter out = response.getWriter();
    String result = (String) invocation.getStack().findValue(yorValueName);
    /*下面输出result*/
    }
qt03061127 2009-02-19
可以在ACTION中直接组装好XML对象后转换撑STRING,随便用什么解析器,比如JDOM
组装好DOCUMENT后,在XmlResultType中取得DOCUMENT(用值栈或者REQUEST总有办法传递过去的),然后这样输出:
        HttpServletResponse resp= (HttpServletResponse) invocation.getInvocationContext().get(HTTP_RESPONSE);
        XMLOutputter out = new XMLOutputter();
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("application/xml; charset=UTF-8");
       
        out.output((Document)doc, resp.getWriter());
概念性的随便写写,自己摸索下
Global site tag (gtag.js) - Google Analytics