`
condeywadl
  • 浏览: 76563 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

MyLibrary问题分析(三)-struts2控制器(action)返回字符串

阅读更多

   今天难道的早起(因为早上要开会),或许很久没有那么早起床了,今天起床之后一点都不困,显得特兴奋,昨天自然心情很好,比赛忙完了,项目又接近尾声,似乎我一下子又空了起来,终于又可以继续写我的MyLibrary了,但是马上要考可恶的六级了,似乎今年没有完成的希望了。

   今天下午小小的玩了下,继续我的java之旅,这次遇到了一个问题,需要Action返回一个字符串放到前台解析,网上一搜一大堆,我也不另外写个文章来说明怎么做,以前也遇到过这样的情况,但是似乎以前用的方法比较烂,这次想选一个一劳永逸的办法去解决,所以我采用了如下方法

   首先自己定义了一返回类型(字符串), 这个类代码如下:

public class StringResult extends ServletRedirectResult {

	private static final long serialVersionUID = 1L;
	private String contentTypeName;
	private String stringName = "";

	public StringResult() {
		super();
	}

	public String getContentTypeName() {
		return contentTypeName;
	}

	public void setContentTypeName(String contentTypeName) {
		this.contentTypeName = contentTypeName;
	}

	public String getStringName() {
		return stringName;
	}

	public void setStringName(String stringName) {
		this.stringName = stringName;
	}

	public StringResult(String location) {
		super(location);
	}

	protected void doExecute(String finalLocation, ActionInvocation invocation)
			throws Exception {
		HttpServletResponse response = (HttpServletResponse) invocation
				.getInvocationContext().get(HTTP_RESPONSE);
		
		String contentType = conditionalParse(contentTypeName, invocation);
		if (contentType == null) {
			contentType = "text/plain; charset=UTF-8";
		}
		response.setContentType(contentType);
		PrintWriter out = response.getWriter();
		
		String result = (String) invocation.getStack().findValue(stringName);
		out.println(result);
		out.flush();
		out.close();
	}

}

   新建完这个类后,我们就可以在struts2配置文件中使用这个返回类型:

  

<package name="default" namespace="" extends="struts-default"> 
     <result-types>
            <result-type name="string" class="com.condey.system.StringResult"></result-type>
     </result-types>
 </package>   

 

    如果某个action需要使用这个返回类型,就可以这么写:

   

  <action name="deleteSort" class="manageSortAction" method="deleteSortAction">
          <result name="deResult" type="string">
             <param name="stringName">deResult</param>
          </result>
</action>

    这里简单说一下 name="deResult"这个result  就是在 deleteSortAction这个方法中  return "deResult"的这个result,然后 <param name="stringName"> 就是StringResult的字段, 接下去的deResult就是当返回这个result的时候,action中deResult值给予StringResult的stringName这个字段

    下面是deleteSortAction这个method:

    

public String deleteSortAction() {
		if (sortId < 0)
			deResult = "false";

		try {
			Boolean result = manageSort.deleteSort(sortId);

			if (result == true) {
				deResult = "success";
				
			} else
				deResult = "false";
		} catch (Exception e) {
			deResult = "false";
			return "deResult";
		}
		return "deResult";
	}

    忽然我又出现了一个疑问为什么SUCCESS这些就可以直接使用呢? 我粗略的查了查,看了struts-default.xml之后,发现result的默认类型为:

   

<result-types>  
    <result-type name="dispatcher" default="true"   
    class="org.apache.struts2.dispatcher.Servlet  
    DispatcherResult"/>  
</result-types> 

    知道了DispatcherResult 去查了下源代码, 然后就一目了然了,他使用的直接String finalLocation传值方式,嘿嘿~深入研究框架的源代码还是挺重要的,继续研究中ing ......

3
0
分享到:
评论
1 楼 johnfanyong 2011-03-02  
赞一个。     

相关推荐

Global site tag (gtag.js) - Google Analytics