我现有一个jsp文件,显示书的目录,每一个条目是一个href,通过点击相应条目,以流的形式读取本地磁盘的文件供外网访问。action已经获得了路径信息,我原来是拿servlet实现的,会生成新的页面。现想直接通过struts2 action直接实现,我想原理还是一样,都是读流,但是具体怎么实现,还请明示。另如何使目录和内容如何显示在一页。
解决方案 »
- 验证码的程序怎么在web.xml中配置
- 谁有strut2的api文档
- 批量插入,需要带回自增主键问题。在MYSQL下正常。SQLSERVER下异常。说返回值是ResultSet不能放到int[]中去。求SQLSERVER 解决办法
- 工作第一天---散分
- 桌面程序
- 多线程并发将数据添加到集合,请大神指点指点!
- Hibernate连接SQLserver出错,SEVERE: Error parsing XML: XML InputStream(2) The markup in the document preceding the root element
- web服务和SAO是啥关系?
- stucts的Action问题
- 我的EJB程序出现javax.naming.linkexception,怎么回事啊?
- 关于正则表达式得一些小问题
- 如何做jsp+javabean+servlet+oracle的查询
[code=Java]
// 首先,设置Action框架在本Action执行完毕后,不再做转发
ActionContext.getContext().getActionInvocation().getProxy().setExecuteResult(false);// 取得 HttpServletResponse
HttpServletResponse response = ServletActionContext.getResponse();//接下来,你可以像在servlet中一样,使用response直接向前台写数据了。
用合适的技术解决合适的问题,这是我的观点。
既然你已经采用Struts,实际上,就应该遵循Struts的用法,
但如果你一定要有自己的独特用法,那要么是你有独特的需求,要么是你没有真正理解自己的工具。
所以,我觉得没什么好不好的,适合你的需求就好。
再有第2个问题,如何将内容和目录放在一个页面中,我想要是用 ajax的话,ajax返回的是数据,
可是现在返回的是整个页面包括html的头信息等等。
因为你现在用的不是Ajax,而是在Action中读取一个文件返回,所以当然包含HTML头等信息了。
反过来说,即便用Ajax,如果像你现在这样直接读文件返回,也是包含头的。
返回什么数据是你后台的程序说了算,不是你用的什么技术说了算。要是用iframe的话,我试了试还是没成功,又如何操作呢,谢谢各位了。
没明白,实际上,如果你后台就是html的话,用iframe,完全可以不写任何后台,
直接iframe.src=URL就可以了。
http://topic.csdn.net/u/20090424/16/dab34eb2-be76-4577-ad94-3ff45eaddd4c.html
http://topic.csdn.net/u/20090424/16/f27e9134-9e50-4ed1-a194-52ede474a41c.html
第2个问题我主要想实现的是左边是由数据库读出来的目录,右边是根据点击相应目录读取本地磁盘相应位置的内容。所以考虑了异步请求ajax和实现相对简单些的iframe。至于你说的iframe.src=url的方式,由于是根据左边的点击来动态得到的,所以需要灵活的写,我还不是很清楚,希望能再次得到你的指点。
我也尝试用左右两个iframe,但是我想可能设计到了二次请求吧,如果左左边是iframe,并没有得到目录,如果左边不是iframe,在目录上我用<a href...targets="">的形式指向右边的iframe,并没有在当前页中打开,而是在新的页面中打开的。此外,按你所说直接指向url,这样能否供外网访问。
再次感谢你对我的帮助!
改成:
<a href="javascript:void(0)" onclick="目标frame.src='要展示的URL'">目录项</a>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/alveole-struts2" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title><s:property value="traycd" /></title>
<meta http-equiv="Content-Script-Type" content="text/javascript"><body>
<form name="form1" method="post" action="">
<table border="0">
<s:iterator value="ptrees">
<tr><td>
<s:url id="url" value="showdetail.action">
<s:param name="t1">
<s:property value="t1" />
</s:param> <s:param name="e1">
<s:property value="e1" />
</s:param>
<s:param name="p1">
<s:property value="p1" />
</s:param>
<s:param name="c1">
<s:property value="c1" />
</s:param>
</s:url>
<s:a href="javascript:void(0)" onclick="show2.src='%{url}'"><s:property value="Name" /> </s:a>
</td></tr>
</s:iterator>
</table> <iframe width="0px" height="0px" id="show2" name="show2" ></iframe> </form>
</body>
</html>
<action name="download" class="actionFile" method="download">
<interceptor-ref name="params"/>
<result type="stream">
<param name="contentType">download</param>
<param name="inputName">targetFile</param>
<param name="contentDisposition">filename=${filePOJO.file_name}</param>
<param name="bufferSize">4096</param>
</result>
</action>你只要在download方法里,将文件读出来,读到一个inputStream中,并将其赋值给targetFile.
本人如此实现已成功,自己试试。