Java PrimeFaces自动完成在更新后丢失值
PrimeFaces的自动完成组件有问题。 我将它与pojo一起使用,所以我还创建了一个转换器,直到这里一切都很酷,工作正常 在用户选择一个元素之后,我调用一个支持bean,ajax组件将所选对象作为参数发送。 在ajax组件中,我还设置了更新autocomplete组件本身,当它使用所选pojo的java地址更新autocomplete组件的字段值时,出现了问题 例如:这是一个地址规范化服务,因此当用户开始键入某个内容时,应该建议一个现有地址。 因此,用户开始在字段中键入类似“john”的内容,自动完成提示“john Fitzgerald Kennedy,New York,New York”以及其他建议。假设有5条建议 建议是Address类型的对象,具有以下属性:地址、邮政编码、地区、州等 在这里之前一切都很好。在建议中,用户只看到建议的地址及其各自的区域。这就是我想要的 现在,用户单击其中一个建议,ajax组件调用它必须调用的内容,做它应该做的事情,然后更新一些组件以及自动完成组件。直到更新之前,一切正常,在字段中,我有我所选项目的确切标签。但是我做这个更新是因为我需要其他的东西 XHTML:Java PrimeFaces自动完成在更新后丢失值,java,jsf,primefaces,autocomplete,Java,Jsf,Primefaces,Autocomplete,PrimeFaces的自动完成组件有问题。 我将它与pojo一起使用,所以我还创建了一个转换器,直到这里一切都很酷,工作正常 在用户选择一个元素之后,我调用一个支持bean,ajax组件将所选对象作为参数发送。 在ajax组件中,我还设置了更新autocomplete组件本身,当它使用所选pojo的java地址更新autocomplete组件的字段值时,出现了问题 例如:这是一个地址规范化服务,因此当用户开始键入某个内容时,应该建议一个现有地址。 因此,用户开始在字段中键入类似“john”的内容
<p:autoComplete id="address"
value="${normalizationBean.address}" var="result" converter="#{normalizationBean}"
itemLabel="${''.getClass().toString().equalsIgnoreCase(result.getClass().toString()) ? result : result.indirizzo }"
itemValue="${result}" completeMethod="#{normalizationBean.loadSuggestions}"
disabled="#{disabled}" style="width:100%;" styleClass="input indi" immediate="true">
<p:ajax update="cap, regionContainer" listener="#{normalizationBean.setSelectedSuggestion}" event="itemSelect">
<ui:param name="selectedSuggestion" value="${result}" />
</p:ajax>
<p:column>
${result.indirizzo}
</p:column>
<p:column>
${result.localita}
</p:column>
</p:autoComplete>
豆子:
@模型
公共类NormalizationBean实现可序列化的转换器{
私人地址建议列表类型地址建议;
私有字符串地址;
公共列表加载建议(字符串查询){
//调用返回建议列表的服务
AddressSuggestionListType结果=ShellService.instance()
.getSuggestions(查询);
如果(结果==null){
addressSuggestions.setErr(“无法连接到服务”);
}否则{
地址建议=结果;
}
}
return addressSuggestions.getList();
}
公共无效设置selected建议(SelectEvent selected){
AddressSuggestionType addType=(AddressSuggestionType)已选中。getObject();
this.address=addType.getAddress();
}
// ...
}
提前感谢!:) 将属性immediate从true更改为false就足够了。 显然,它是从itemValue获取对象并返回其toString()表示形式
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if(value==null || value.equals(""))
return null;
try{
return addressSuggestions.getList().get(Integer.valueOf(value));
} catch(Exception e){
return null;
}
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if(value==null || value.equals(""))
return null;
return String.valueOf(addressSuggestions.getList().indexOf(value));
}
@Model
public class NormalizationBean implements Serializable, Converter{
private AddressSuggestionsListType addressSuggestions;
private String address;
public List<AddressSuggestionsType> loadSuggestions(String query) {
// call the service which returns a list of suggestions
AddressSuggestionsListType result = ShellService.instance()
.getSuggestions(query);
if (result == null){
addressSuggestions.setErr("Could not connect to service");
} else {
addressSuggestions= result;
}
}
return addressSuggestions.getList();
}
public void setSelectedSuggestion(SelectEvent selected){
AddressSuggestionsType addType = (AddressSuggestionsType) selected.getObject();
this.address = addType.getAddress();
}
// ...
}