Code Bye

struts2 action的方法和返回值类型问题

记得书上和老师都说了,struts2的action的方法有几个规则:
第一:不能接受参数
第二:返回值型只能是String或者无返回值型(void)
我一直牢牢记着,有次面试人家问我有几种返回值类型,我就说一种String.然后面试官没再说话,当时就觉得没对劲!
今天做struts2的文件下载,看了下,action里面的方法不是还能返回InputStream的么:
于是我就怀疑了是否还能返回其他型的,是否能携带参数。于是我做了个实验:
struts2文件下载:

   public InputStream getDocumentInputStrame() throws FileNotFoundException{
		String downFilePathServletActionContext.getServletContext()
		.getRealPath("/");//文件路径			 
               downloadFileName=tenderfile.getFilename();//文件名称
		downloadFileName=this.getFileEcodingName(downloadFileName);//调用action的方法传入参数,对文件名称进行编码解码。
		StringBuffer sb=new StringBuffer();
		sb.append(downFilePath).append(downloadFileName);
		File file=new File(sb.toString());
		InputStream in=new FileInputStream(file);
		return in;//返回输入流
	}

这里就是struts2文件下载的代码.下面是上面调用的getFileEcodingName()方法:

  
public String getFileEcodingName(String downloadFileName) { 
		try {
			downloadFileName=new String(downloadFileName.getBytes(),"ISO-8859-1");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}       return downloadFileName; 
	    }
 

我的action  extends ActionSupport。
我运行了测试了,没有任何问题,方法也调用了编码也对了。
如果这样的话,岂不是和老师讲的违背了??
请大神指点下这到底是为什么


5分
老师说的是execute方法的返回值只能为String吧。

10分
execute 方法返回String ,根据返回最后跳转,当然 strtus2 可以添加自己的方法/

10分
面试官问你的应该是result的型吧
struts2常用返回值型说明
chain 用户Action链式处理
dispatcher 用来整合JSP 是result元素type的默认值
freemarker 用来整合FreeMarker
httpheader 用来处理特殊的HTTP行为
redirect 用来重定向到其他的文件
redirectAction 用来重定向到其他的Action
stream 用来向浏览器返回一个InputStream 
估计是楼主理解有误吧
引用 3 楼 longtian1213 的回复:

面试官问你的应该是result的型吧
struts2常用返回值类型说明
chain 用户Action链式处理
dispatcher 用来整合JSP 是result元素type的默认值
freemarker 用来整合FreeMarker
httpheader 用来处理特殊的HTTP行为
redirect 用来重定向到其他的文件
redirectAction 用来重定向到其他的Action
stream 用来向浏览器返回一个InputStream 
估计是楼主理解有误吧

我猜也是这样。真是郁闷啊!估计被人鄙视了一顿!呵呵
不过这么说来struts2中的方法除了execute外其他就和普通的方法没什么不一样吧,可以传递参数,可以返回如int,boolean这些,如果有需要的话!呵呵

有人在吗?求各种真理!各种各种真理啊!

10分
普通方法也只能返回String类型
引用 6 楼 splendid_java 的回复:

普通方法也只能返回String类型

那那上面代码如何解释!晕了晕了  到底是怎么样的…..

这个贴就这么沉了啊!

5分
哈哈,我也觉得面试官问的是返回类型。。
单说你这个下载demo的话,我觉得不冲突吧,Struts2的拦截器吧
理论上说Struts 2 Action可以返回任何类型

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明struts2 action的方法和返回值类型问题