我在Web项目中使用Primefaces 5.3版自动完成功能,我已经为我正在搜索的java实体编写了搜索方法和转换器 . 这些都可以很好地使用p:ajax选项卡在支持bean中正确设置自动完成中选定的实体,并且最初在itemValue中指定的实体名称在文本输入中设置 .
当我然后提交包含此自动完成的表单时,我从自动完成设置的支持bean中的变量保持原样,但是自动完成上的文本输入将显示实体ID而不是我指定的名称在itemValue上 . 这是因为它在我的转换器中调用toString方法,但我希望它仍然显示名称,但我需要转换器..
有没有人遇到过这个可能有帮助的问题?
我找到了一个描述这种行为的其他线程,但它现在已经有几年了,并且没有答案 .
这个帖子是:
http://forum.primefaces.org/viewtopic.php?f=8&t=37918
因为它可能比我有更好的解释...
任何帮助表示赞赏 .
更新:添加了代码
这是我的autocomplete标记,complete方法返回一个实体类型的java List .
<h:form>
<p:autoComplete id="autocomplete" value="#{bean.selectedEntity}"
completeMethod="#{bean.listOfPossibleEntities}"
itemValue="#{_e}" itemLabel="#{_e.name}" autocomplete="off"
minQueryLength="3" var="_e"
placeholder="Enter Entity Name Here"
converter="EntityConverter" forceSelection="true">
<p:ajax event="itemSelect" update="enclosingForm"/>
<p:column>
<h:outputText value="#{_e.name}" />
</p:column>
</p:autoComplete>
<p:commandButton update="@form" >
</h:form>
FacesConverter看起来如下,我使用DAO调用我们的数据库找到每个id的对象
private EntityDAO entityDAO = (EntityDAO)Component.getInstance("entityDAO");
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
Integer id = Integer.valueOf(value);
return entityDAO.findById(id,false);
}
@Override
public String getAsString(FacesContext fc, UIComponent uic, Object object) {
String result = "";
if(object != null) {
if(object instanceof Entity){
result = ""+ String.valueOf(((Entity) object).getEntityId());
}
}
return result;
}
因此,在选择自动完成中的实体并使用p:commandButton提交值显示或实体将从实体名称更改为实体ID之后更新h:表单时,是 .
希望这有助于进一步感谢 .