[英]How to call action with parameters of JSP Servlet from JavaScript?
[英]JSP - How to call Servlet only after Action finishes executing?
好的,我有一个JSP,一个Servlet和一个Action类。 JSP有一个“下载”按钮,单击该按钮可以调用两个函数-“ build()”和“ download()”。 “ build()”函数执行一个动作。 该操作将在服务器上创建并生成文件。 “ download()”用于使用servlet从服务器获取文件,以便用户下载。
Action.java
-----------
buildFile() {
//build file/writes in the file
}
Servlet.java
-----------
doget(){
//gets the file from the server
}
JSP
---
<script type="text/javascript">
function build() {
//calls buildFile();
//form.submit();
}
function download() {
window.open('/Servlet');
}
</script>
<input type="button" class="button" value="Download" onclick="build();download();"/>
现在的问题是,每当我单击“下载”时,在build()之后立即将download()称为。 因此,如果文件中的数据较少,则构建过程将完成,并且用户可以下载文件。 但是,如果要写入文件的数据很大,则在“ build()”之后仍会立即将download()称为IMMEDIATELY,并且用户只能在其下载的文件中获得部分数据(因为该文件仍在后台构建)。 我想做一些事情,使download()等待Action(buildFile())完成执行。 同样,如果没有form.submit(),则由于某种原因不会调用该动作。 这就是为什么我不能使用“ document.ready”或“ window.onLoad”的原因。 因此,请提出其他建议。 我也尝试过这个:
function build() {
//calls buildFile();
//form.submit();
download();
}
function download() {
window.open('/Servlet');
}
<input type="button" class="button" value="Download" onclick="build();"/>
但这不起作用。
与其直接调用两个javascript方法build()和download(),不如使用直接的HTML表单提交到同时生成和下载文件的servlet。
<form action='/Servlet' method='post' target='_blank'>
<input type='hidden' name='param_needed_to_build_file' value='something' />
<input type="submit" class="button" value="Download" />
</form>
target ='_ blank'使它打开一个新窗口。 如果需要,也可以使用method ='get'。 如果需要,您仍然可以使用javascript在另一个窗口中弹出servlet,但是构建和下载都应在servlet中。
在您的Servlet中,实现doGet和/或doPost方法来调用Java函数build()和download(),这两个函数都将在您的Servlet中。 或者,您可以将build()方法放在servlet中引用和利用的另一个类中。
实际上,通常的做法是构建文件,然后将其直接写到响应对象中,而不是先写到文件系统中,然后再读取它(除非您出于某种原因以后要保存文件)。
我找到了解决方案。 我只调用build(),然后在操作类的build方法的结尾,我就在servlet中调用了doget()方法。
Action.java
-----------
buildFile() {
//build file/writes in the file
Servlet servlet = new Servlet();
servlet.doget();
}
Servlet.java
-----------
doget(){
//gets the file from the server
}
<input type="button" class="button" value="Download" onclick="build();"/>
这将构建我的文件,无论花费多长时间,然后都会向用户弹出下载框。
您的按钮说明了一切。 您希望用户按下“下载”按钮并获取文件。 但是必须先构造文件才能提取文件。
这告诉您需要做两件事; 构建,然后下载。
onclick="buildAndDownload();"
function buildAndDownload(){
// build file
// start the download
}
您甚至可以将这两个动作的逻辑分为两个单独的方法。
下载功能所需要的是一种查询服务器文件是否准备就绪的方法。
function download (){
while(! fileIsReady()){
Thread.sleep(500);
}
// Start the download
}
当然,如果您知道文件始终在x毫秒后就可以下载了,并且不想构建更多的服务器端功能,则可以调用“ Thread.sleep(1500);”。 等待1.5秒,然后再开始下载。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.