GreyWolf18:
私の春のアプリケーションでは、私はそれは私が名前や似た名前を探してるとき以外は動作しますが、私は何も入力しないと検索したとき、それが何を返すべきではないため、ユーザーは名前のデータベースを検索することができ、検索機能を追加しましたしかし、名前の完全なリストを返します。
それがnullの場合、私は私のロジックの欠陥が何であるか、リターンnullにリストを設定しますか?
テストとfindbynameのSQLを使用してから、私はそれが私のSQL状態の欠陥だと思います
使用される制御方法であります
@RequestMapping("search")
public ModelAndView SearchBeers(@RequestParam("searchTerm") String searchTerm) {
return new ModelAndView("/Searchbeers", "beerList", service.Search(searchTerm));
}
サービス法と呼ばれています
public List<Beers> Search(String searchTerm) {
EntityManager em = DBUtil.getEMF().createEntityManager();
List<Beers> list = null;
try {
list = em.createNamedQuery("Beers.findByLikeName", Beers.class)
.setParameter("name", searchTerm)
.getResultList();
if (list == null || list.isEmpty()) {
list = null;
}
} finally {
em.close();
}
return list;
}
そして使用されるSQLステートメントがあります
@NamedQuery(name = "Beers.findByLikeName", query = "SELECT b FROM Beers b WHERE b.name LIKE CONCAT('%',:name,'%')")
リストを表示するときのためのJSPがあります
<c:forEach items="${beerList}" var="beer">
<tr>
<td>${beer.id}</td>
<td>${beer.name}</td>
<td>${beer.abv}</td>
<td>
<form action="/Assignment3/beer/viewBeer">
<input type="hidden" name="id" value="${beer.id}"/>
<input type="submit" value="<spring:message code="label.viewDetails"/>"/>
</form>
</td>
</tr>
</c:forEach>
XxTheZokoxX:
あなたはそれを解決するために多くの方法がありますが、文字列は、クエリが空になったときの問題は、次のとおりです。
SELECT b from Beers b Where b.name LIKE '%%'
だから、あなたはので...、空の文字列を持っている場合、antoherフラグを行う必要がLIKE '%%'
すべての名前を見つけます。
PDは:良い練習がnullを返さない、より良い空のリストです。