アプリケーションコントローラーに次のメソッドがあります。
public static Result searchJourney(String address) {
return ok(
views.html.searchResults.render(Journey.searchByAddress(address),journeyForm)
);
}
これは、引数として文字列を受け取り、この文字列をモデルメソッドsearchByAddressに渡します。アドレスによる検索メソッドは、クエリの結果であるモデルオブジェクトのリストを返します。次に、これを使用してフォームに入力します。
public static List<Journey> searchByAddress(String address) {
return find.where().ilike("start_loc", "%"+address+"%").findList();
}
私が抱えている問題は、ビューフォームからアドレス引数を取得することです。ビューは次のようになります。
@main("Journey Search", "search") {
<body>
<form>
Search for journeys starting in a town/city:
<input type="text" name="arg"></br>
<input type="submit" onsubmit="@routes.Application.searchJourney("@arg")" value="Search">
</form>
}
すべてのルーティングは期待どおりに機能していますが、この引数をコントローラーメソッドに渡すことができないようです。テキストボックスに値を入力すると、URLが更新され、入力が表示されます。
http://localhost:9000/search?arg=testvalue
しかし、結果ページが期待どおりにレンダリングされることはありません。
アップデート:
<form action="@routes.Application.searchJourney(arg)">
Search for journeys starting in a town/city:
<input type="text" name="arg"></br>
<input type="submit" value="Search">
</form>
引数の前後に引用符と@記号がないと、not found: value arg
エラーが発生します。
レンダリングされる結果のHTML
@(listJourneys: List[Journey], journeyForm: Form[Journey])
@import helper._
@main("Search Results", "search") {
<h1>Search Results</h1>
<table class="table table-hover">
<thead>
<tr>
<th>#</th>
<th>Starting Location</th>
<th>End Location</th>
<th>Participant Type</th>
<th>Date</th>
<th>Time</th>
<!--<th>User</th>-->
</thead>
<tbody>
</tr>
@for(journey <- listJourneys) {
<tr>
<td>@journey.id</td>
<td>@journey.start_loc</td>
<td>@journey.end_loc</td>
<td>@journey.participant_type</td>
<td>@journey.date</td>
<td>@journey.time</td>
</tr>
}
</tbody>
</table>
}