Я пишу пример об автозаполнении spring mvc и jquery/json. Я использую spring и hibernate, получаю значение объекта от json, но когда я его ищу, он не работает. Я получаю из базы данных, но автоматически не раскрывает список значений, пожалуйста, помогите мне в этой проблеме.
Мой пользователь
private Integer id;
private String name;
private String country;
public User() {
}
public User(String name, String country) {
this.name;
this.country;
}
// getter and setter
...
Моя служба (UserServiceImpl.java)
@Repository
public class UserRepositoryImpl implements UserRepository {
@Autowired
private SessionFactory sessionFactory;
@SuppressWarnings("unchecked")
public List<String> getCountryList(String query) {
List<String> countries = new ArrayList<String>();
Query queryList = sessionFactory.getCurrentSession().createQuery("FROM user u WHERE u.country LIKE '%"+query+"%'");
countries = queryList.list();
query = query.toLowerCase();
return countries;
}
}
Мой контроллер (UserController):
@Controller
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value = "/index", method = RequestMethod.GET)
public ModelAndView index() {
User userForm = new User();
return new ModelAndView("user", "userForm", userForm);
}
@RequestMapping(value = "/get_country_list", method = RequestMethod.GET, headers="Accept=*/*")
public @ResponseBody List<String> getCountryList(@RequestParam("term") String query) {
List<String> countryList = userService.getCountryList(query);
return countryList;
}
Мой jsp (user.jsp)
<body>
<h2>Spring MVC Autocomplete with JQuery & JSON example</h2>
<form:form method="post" action="save.html" modelAttribute="userForm">
<table>
<tr>
<th>Name</th>
<td><form:input path="name" /></td>
</tr>
<tr>
<th>Country</th>
<td><form:input path="country" id="country" /></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Save" />
<input type="reset" value="Reset" />
</td>
</tr>
</table>
<br />
</form:form>
<script type="text/javascript">
function split(val) {
return val.split(/,\s*/);
}
function extractLast(term) {
return split(term).pop();
}
$(document).ready(function) {
$( "#country" ).autocomplete({
source: function (request, response) {
$.getJSON("${pageContext. request. contextPath}/get_country_list.html", {
term: extractLast(request.term)
}, response);
},
search: function () {
// custom minLength
var term = extractLast(this.value);
if (term.length < 1) {
return false;
}
},
focus: function () {
// prevent value inserted on focus
return false;
},
select: function (event, ui) {
var terms = split(this.value);
// remove the current input
terms.pop();
// add the selected item
terms.push(ui.item.value);
// add placeholder to get the comma-and-space at the end
terms.push("");
this.value = terms.join(", ");
return false;
}
});
});
</script>
</body>
У меня есть автозаполнение теста с помощью значений ответа firebug и json
Object { id=1, name="john", country="london", more...}
Object { id=2, name="johanson", country="london", more...}
и он имеет раскрывающееся меню, но значение не отображается в автозаполнении. Пожалуйста, помогите мне...
В файле UserRepositoryImpl.java измените запрос, как показано ниже.
Запрос queryList = sessionFactory.getCurrentSession(). CreateQuery ("Выберите u.country FROM user u WHERE u.country LIKE '%" + query + "%'");