0

有谁知道为什么每次我重新加载页面时我的操作都会运行。我有一个带有按钮的页面,当我单击它时应该运行该按钮。但现在它似乎在我加载页面时运行。

这是文件deliverables.scala.html中的我的按钮和javascript

<input type="button" class="btn success" id="add" value="Export to Excel" onclick="JavaScript:generateExcelClick()" />

<script>
function generateExcelClick(event)
{
   window.location = "@Application.generateExcel(currentPage)";
}
</script>

我的控制器:

public static void generateExcel(List<Infoobject> list) {
    ...creating a file (works)
    ...No return
}

如何更改此代码,使其仅在单击按钮时运行?该操作不应呈现另一个页面或类似的东西。我只想生成一个文件。

谢谢!

编辑

我试过 @controllers.Application.generateExcel(currentPage); 和@Application.generateExcel(currentPage); 在我的 Javascript 函数中,但即使我不单击按钮,它仍在创建文件。

我还检查了 @Application.generateExcel(currentPage); 不从另一个站点 och 函数运行。

请问有人吗?

4

3 回答 3

1

一点解释:

在您的 Scala 视图中编写时,您说

@Application.generateExcel(currentPage)

generateExcel在控制器中运行功能Application

该怎么办

您不希望它立即运行该功能。你想让它去那里onClick

所以使用

@routes.Application.generateExcel(currentPage)

这会输出到该函数的链接

但是,要使其正常工作,必须在您的routes

将此添加到路线

GET  /whatever/:thing                 controllers.Application.generateExcel(thing: List<path.InfoObject> list)

然而

这是个坏主意。为什么?因为将整个列表放在 URL 中并不好。

  1. 您是否曾在 URL 中看到过复杂的列表
  2. URL 必须少于 2000 个字符

做什么代替

将列表作为 POST 数据发送。根据您获取数据的方式,您必须弄清楚

于 2013-07-08T12:56:59.410 回答
1

如果您试图在单击按钮时仅调用控制器,您可以尝试:

<a href="@routes.YourController.YourMethod(args)"><button>Mybutton</button></a>

我认为您在这里不需要javascript(如果我了解您的情况)。

编辑:这个答案的想法是说页面中的 javascript 越少越好。

Edit2:无法评论下面的讨论,所以我把它放在这里:正如我在这里所说:link,你必须像这样声明你的对象:

controllers.Application.method(list : java.util.List[your.package.Infoobject])

替换your.package为您的对象所在的包(也许models

但是你会得到一个错误:No QueryString binder found for type

这是因为您只能将字符串和数字放在 URLS 中,因此框架会告诉您将对象(列表)转换为字符串(使用 QueryStringBinder)。

于 2013-07-08T12:58:18.033 回答
0

我会从按钮/链接调用 routes-> /generateExcelReport 并使其返回文件

如何将文件发送到浏览器进行下载?

如何使用 Play Framework 2.0 下载文件

于 2013-07-05T13:11:34.753 回答