Edward-Chai 2017-11-23 08:29 采纳率: 100%
浏览 1493
已采纳

Struts2 使用redirectAction结果类型传递参数时,会跳转到错误的路径

我希望通过点击下载按钮来跳转到DownloadCount.action并传递参数filename来在数据库中进行一次下载计数,再让filename参数通过redirectAction方式传参给downfile.action来进行下载,但是DownloadCount.action执行完成后会跳转到http://downfile.action/?filename=1511398398834.xlsx,问下各位为什么会出现这种情况以及如何解决,谢谢!
private.jsp

 <html>
<head>
    <title>Title</title>
</head>
<body>
<p><a href='<s:url value="upload.jsp"></s:url>'>上传文件</a></p>
<table>
    <tr><td>文件id</td><td>文件名</td><td>文件类型</td><td>文件大小</td><td>上传者</td><td>最后下载时间</td><td>下载次数</td><td>最后下载用户</td><td>文件操作</td></tr>
    <s:iterator value="filelist" var="file" id="file" >
        <tr>
            <td><s:property value="#file.fileid"/></td>
            <td><s:property value="#file.filename"/></td>
            <td><s:property value="#file.filetype"/></td>
            <td><s:property value="#file.filesize"/></td>
            <td><s:property value="#file.uploader"/></td>
            <td><s:property value="#file.lastdtime"/></td>
            <td><s:property value="#file.downtimes"/></td>
            <td><s:property value="#file.lastdownloader"/></td>
            <td><a href='<s:url value="DownloadCount.action"><s:param name="filename" value="#file.filename"></s:param></s:url>'>下载</a>&nbsp;
                <a href='<s:url value="FileDelete.action"><s:param name="filename" value="#file.filename"></s:param><s:param name="uname" value="uname"></s:param></s:url>'>删除</a>
            </td>
        </tr>
    </s:iterator>
</table>
<s:debug></s:debug>
</body>
</html>

DownloadCountAction.java

 package com.action;

import com.opensymphony.xwork2.ActionSupport;
import com.util.DBTools;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;

@Namespace("/")
@ParentPackage("struts-default")
public class DownloadCountAction extends ActionSupport {
    private String filename;

    public String getFilename() {
        return filename;
    }

    public void setFilename(String filename) {
        this.filename = filename;
    }

    @Action(value = "DownloadCount",results = {
            @Result(name = "success",location = "/downfile.action?filename=${filename}",type = "redirectAction")
    })
    public String DownloadCount() throws Exception{
        DBTools db=new DBTools();
        db.FileDownload(filename);
        return SUCCESS;
    }
}

struts.xml中关于downfile.action的配置

         <action name="downfile" class="com.action.DownFileAction" method="downloadFile">
            <result name="success" type="stream">
                <param name="bufferSize">4096</param>
                <param name="contentDisposition">
                    attachment;filename="${filename}"
                </param>
                <param name="inputName">downFile</param>
            </result>
        </action>

DownFileAction.java

 package com.action;

import com.opensymphony.xwork2.ActionSupport;
import com.util.DBTools;
import org.apache.struts2.ServletActionContext;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

public class DownFileAction  extends ActionSupport{

    private String filename;

    public String getFilename() {
        return filename;
    }

    public void setFilename(String filename) throws Exception {

        this.filename = new String(filename.getBytes("ISO8859-1"),"utf-8");
    }
    public String downloadFile() throws Exception {
        return SUCCESS;
    }
    public InputStream getDownFile()throws Exception{
        String path=ServletActionContext.getServletContext().getRealPath("/WEB-INF/uploadlist");
        File file=new File(path+"/"+this.getFilename());
        InputStream inputStream=new FileInputStream(file);
        return inputStream;
    }
}

展开全部

  • 写回答

2条回答 默认 最新

查看更多回答(1条)
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 全志t113i启动qt应用程序提示internal error
  • ¥15 ensp可以看看嘛.
  • ¥80 51单片机C语言代码解决单片机为AT89C52是清翔单片机
  • ¥60 优博讯DT50高通安卓11系统刷完机自动进去fastboot模式
  • ¥15 minist数字识别
  • ¥15 在安装gym库的pygame时遇到问题,不知道如何解决
  • ¥20 uniapp中的webview 使用的是本地的vue页面,在模拟器上显示无法打开
  • ¥15 网上下载的3DMAX模型,不显示贴图怎么办
  • ¥15 关于#stm32#的问题:寻找一块开发版,作为智能化割草机的控制模块和树莓派主板相连,要求:最低可控制 3 个电机(两个驱动电机,1 个割草电机),其次可以与树莓派主板相连电机照片如下:
  • ¥15 潜在扩散模型的Unet特征提取
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部