[英]Play Framework: Controller action runs every load
有没有人知道为什么每次重新加载页面时我的操作都会运行。 我有一个带有按钮的页面,当我点击它时它应该运行。 但现在它似乎在我加载页面时运行。
这是我的按钮和javascript文件deliverrables.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函数运行。
有人,拜托?
一点解释:
在您的Scala视图中写作时,您说
@Application.generateExcel(currentPage)
它在控制器Application
运行generateExcel
函数
该怎么办
您不希望它立即运行该功能。 你想让它去那里onClick
所以使用
@routes.Application.generateExcel(currentPage)
这会输出该功能的链接
但是要使其工作,必须在您的routes
有一个(GET)链接到该功能
将其添加到路线
GET /whatever/:thing controllers.Application.generateExcel(thing: List<path.InfoObject> list)
然而
这是一个坏主意。为什么? 因为将整个列表放在URL中并不好。
怎么做INSTEAD
将列表作为POST数据发送。 根据您收集数据的方式,您必须弄明白
如果您在单击按钮时尝试只调用控制器,则可以尝试:
<a href="@routes.YourController.YourMethod(args)"><button>Mybutton</button></a>
我不认为你在这里需要javascript(如果我了解你的情况)。
编辑:这个答案的想法是说你的页面中的javascript越少越好。
Edit2:无法评论下面的讨论,所以我把它放在这里:正如我在这里所说: 链接 ,你必须像这样声明你的对象:
controllers.Application.method(list : java.util.List[your.package.Infoobject])
将your.package
替换为您的对象所在的包(可能是models
)
但是你会得到一个错误的错误: No QueryString binder found for type
这是因为您只能在URL中放置字符串和数字,因此框架会告诉您在String(使用QueryStringBinder)中转换Object(List)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.