日期:2014-05-18  浏览次数:20868 次

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。
我运行了测试了,没有任何问题,方法也调用了编码也对了。
如果这样的话,岂不是和老师讲的违背了??
请大神指点下这到底是为什么
Struts Java 面试 String

------解决方案--------------------
老师说的是execute方法的返回值只能为String吧。

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

面试官问你的应该是result的类型吧
struts2常用返回值类型说明
chain 用户Action链式处理
dispatcher 用来整合JSP 是result元素type的默认值
freemarker 用来整合FreeMarker
httpheader 用来处理特殊的HTTP行为
redirect 用来重定向到其他的文件