0

我写了关于自动完成 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;
        }
    }
    
  • 我的控制器(用户控制器):

        @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 &amp; 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...}

它有下拉列表,但值不会显示在自动完成中。请帮我...

4

1 回答 1

0

在 UserRepositoryImpl.java 文件中更改查询如下

Query queryList = sessionFactory.getCurrentSession().createQuery("Select u.country FROM user u WHERE u.country LIKE '%"+query+"%'");

于 2014-03-27T10:39:16.083 回答