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

ボタンをクリックしたときにコントローラーを呼び出すだけの場合は、次のことを試してください。

<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 に文字列と数字しか入れられないためです。そのため、フレームワークは、(QueryStringBinder を使用して) オブジェクト (リスト) を文字列に変換するように指示します。

于 2013-07-08T12:58:18.033 に答える
1

少し説明:

Scalaビューに書いて、あなたが言うとき

@Application.generateExcel(currentPage)

generateExcelコントローラーで関数を実行しますApplication

何をすべきか

関数をすぐに実行したくありません。あなたはそれがそこに行きたいonClick

だから使う

@routes.Application.generateExcel(currentPage)

これにより、その関数へのリンクが出力されます

ただし、これが機能するには、その関数への (GET) リンクが必要です。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 に答える