有没有人知道为什么每次重新加载页面时我的操作都会运行。我有一个带有按钮的页面,当我点击它时它应该运行。但现在它似乎在我加载页面时运行。
这是我的按钮和文件中的javascript deliverables.scala.html
<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函数运行。
有人,拜托?
答案 0 :(得分: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中并不好。
该怎么做INSTEAD
将列表作为POST数据发送。根据您收集数据的方式,您必须弄清楚
答案 1 :(得分: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中,所以框架会告诉你在String中使用QueryStringBinder转换你的Object(List)。
答案 2 :(得分:0)
我会打电话给路线 - &gt; / generateExcelReport来自按钮/链接并使其返回文件