1

我有我的自动完成组件连接到我的托管 bean,然后连接到我的服务层并从数据库中获取列表。我正在尝试参考展示和我在网上找到的任何其他内容,但我无法让我的自动完成功能正常工作。我有一个演员异常,所以看起来我需要一个转换器。但是我在编写转换器时遇到了麻烦。我对一切是如何传递的感到困惑。

        <p:autoComplete id="placesSearchBar" value="#{searchBarBean.place}" completeMethod="#{searchBarBean.findSimilarPlaces}"
                        var="Place" itemLabel="#{Place.name}" itemValue="#{Place}" converter="PlaceConverter" />

        public class SearchBarBean 
    {
        private Place place;
        private SearchQueryService searchQueryService;
        private Criteria criteria;

        /**
         * @return the place
         */
        public Place getPlace() {
            return place;
        }

        /**
         * @param place the place to set
         */
        public void setPlace(Place place) {
            this.place = place;
        }

        /**
         * @return the searchQueryService
         */
        public SearchQueryService getSearchQueryService() {
            return searchQueryService;
        }

        /**
         * @param searchQueryService the searchQueryService to set
         */
        public void setSearchQueryService(SearchQueryService searchQueryService) {
            this.searchQueryService = searchQueryService;
        }

        /**
         * @return the criteria
         */
        public Criteria getCriteria() {
            return criteria;
        }

        /**
         * @param criteria the criteria to set
         */
        public void setCriteria(Criteria criteria) {
            this.criteria = criteria;
        }

        public List<Place> findSimilarPlaces(String query)
        {
            getCriteria().setName(query);
            List<Place> places = getSearchQueryService().findPlaces(criteria);
            return places;
        }
    }

    public class PlaceConverter implements Converter
{
    @Override
    public Object getAsObject(FacesContext arg0, UIComponent arg1, String submittedValue) {
        SearchBarBean searchBarBean = new SearchBarBean();
        return null;
    }

    @Override
    public String getAsString(FacesContext arg0, UIComponent arg1, Object value) {
         return null;
    }
}
4

1 回答 1

3

您的转换器必须做两件事:将一个字符串(由您的页面提交)转换为您的 pojo 的实例,并将您的 pojo 的实例转换为字符串,以便它可以显示在您的页面上。

您可以通过在 getAsString 方法中返回主键来实现这一点。然后,在您的 getAsObject 方法中,您将获取包含所选项目主键的字符串,并在数据库中查询相关记录。为此,您必须从转换器访问您的查询服务。试一试,让我知道情况如何。

于 2013-01-23T03:06:03.023 回答