我正在使用带有pojos的PrimeFaces autocomplete
,它会显示搜索结果。我的代码如下:
<p:autoComplete id="searchBar" completeMethod="#{search.fetchSuggestions}" value="#{search.selectedSuggestion}"
var="searchResult" itemLabel="#{searchResult.entityName}" itemValue="#{searchResult.entityId}" converter="searchResultsConverter" >
<p:column>
<p:graphicImage value="/images/#{searchResult.entityDisplayPic}" width="40" height="50"/>
</p:column>
<p:column>
#{searchResult.entityName}
</p:column>
</p:autoComplete>
转换器类中的getAsObject()
和getAsString()
方法需要转换哪些值?
我的searchResult
课程如下:
public class SearchResult {//object that hold the data of a single search result
private int entityId;// may be userId/ groupId or etc etc in different cases
private String entityName;
private String entityDisplayPic;
}
答案 0 :(得分:1)
Converter的目标是从字符串表示转换为具体对象,反之亦然。因此,在这种情况下,您需要一个唯一标识/描述您的SearchResult对象的String。这取决于你这个字符串表示的样子。它可能是类中使用的字段的聚合,它可能是一个唯一的标识符,使您可以从其他(数据库)资源加载具体对象。
答案 1 :(得分:0)
我的webapp中有转换器,它在检索到的数据库实体(我正在使用JPA实体)和字符串之间进行“转换”。一个例子是当我填充表单中的下拉列表框时。在这种情况下,从getAsString()
方法返回的字符串只是JPA实体的基于整数的主键(转换为字符串)。然后getAsObject()
方法只需要使用主键进行简单的数据库查找来获取对象。
关键是,getAsString()
的值只需要包含足够的信息,以允许服务器端代码获取唯一对象。您如何实施getAsObject()
完全取决于您。有时它很微不足道,有时它不是。