我让我的自动完成组件连接到我的托管 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;
}
}
您的转换器必须做两件事:将字符串(由您的页面提交)转换为您的 pojo 实例,并将您的 pojo 实例转换为字符串,以便它可以显示在您的页面上。
您可以通过返回 getAsString 方法中的位置的主键来实现这一点。然后,在 getAsObject 方法中,您将获取包含所选项的主键的字符串,并在数据库中查询关联的记录。为此,您必须能够从转换器访问查询服务。试一试,让我知道它是怎么回事。