Я использую компонент PrimeFaces p:autoComplete. Он работает некорректно после проверки формы. Если я, например, оставлю пустым любой другой компонент в форме и после этого получу сообщение проверки, тогда autoComplete потеряет значение. И конвертер пытается преобразовать выбранный объект, в результате автозаполнение возвращает нулевое значение.
public class OrganizationConverter implements Converter {
public Object getAsObject(FacesContext fc, UIComponent uic, String value) {
Organization organization = null;
if (value != null && value.trim().length() >0) {
try{
try {
organization = DAO.OrganizationDAO.findOrganizationByCode(value);}
catch (IOException ex) {
Logger.getLogger(OrganizationConverter.class.getName()).log(Level.SEVERE, null, ex);}
}
catch(NumberFormatException e) {
throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Conversion Error", "Not a valid theme."));
}}
System.out.println("conwerter: value"+value+ "object"+organization);
return organization;
}
public String getAsString(FacesContext fc, UIComponent uic, Object object) {
if (object != null) {
return String.valueOf((object));
}
else {
return null;
}
}
}
<
<p:autoComplete id = "organizationAutoComlete" minQueryLength = "2" forceSelection = "true" selectLimit = "1" autocomplete = "" style = "width:338px;" value = "#{addTrainingBean.re0.training.organization}" converter = "organizationConverter" completeMethod = "#{addTrainingBean.completeOrganization}" immediate = "false" var = "theme" itemValue = "#{theme.code}" itemLabel = "#{theme.name}" scrollHeight = "400" dropdown = "true" dropdownMode = "current" required = "true" requiredMessage = "Uzupełnij pole Organizator">
<p:column headerText = "Kod:">
<h:outputText value = "#{theme.code}" />
</p:column>
</p:autoComplete> Какую версию PrimeFaces вы используете? Возможно, на него влияют github.com/primefaces/primefaces/issues/20 или github.com/primefaces/primefaces/issues/1476?
Привет, я использую PrimeFaces 6.1, я решаю эту проблему, меняя конвертер, но мне не нравится это решение. Я отфильтровал String, чтобы получить идентификатор объекта, а затем заблокировал его по идентификатору. Это решение основано на фильтре String, и я не думаю, что это хороший способ.





Привет, пожалуйста, минимальный воспроизводимый пример. См. Также Как спросить