我在网络项目中使用Primefaces 5.3版自动完成功能,我已经为我正在搜索的java实体编写了搜索方法和转换器。这些都可以很好地使用p:ajax选项卡在支持bean中正确设置自动完成中选定的实体,最初我在itemValue中指定的实体名称在文本输入中设置。
当我然后提交包含此自动完成的表单时,我从自动完成设置的辅助bean中的变量保持原样,但是自动完成上的文本输入将显示实体ID而不是名称为i在itemValue上指定。这是因为它在我的转换器中调用了toString方法,但我希望它仍然显示名称但我需要转换器..
有没有人遇到过这个可以提供帮助的问题?
我找到了一个描述这种行为的其他线程,但它现在已经有几年了,并且没有答案。
这个帖子是:
http://forum.primefaces.org/viewtopic.php?f=8&t=37918
因为它可能比我更好地解释......
感谢任何帮助。
更新:已添加代码
这是我的自动完成标记,complete方法返回实体类型的java列表。
<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:表单是的。
希望这有助于进一步感谢。