Я использую <p:autocomplete>
теги и преобразователи символов, чтобы пользователь мог выбирать адреса из списка заданных адресов в системе. Ниже приведен пример кода .xhtml для двух адресных полей:Использование ListConverter с forceSelection = false
<p:autoComplete id="name" completeMethod="#{viewBean.autocompleteName}" var="_address"
value="#{viewBean.draft.address}" itemValue="#{_address}"
itemLabel="#{_address.name}">
<o:converter converterId="omnifaces.ListConverter" list="#{viewBean.addresses}" />
<p:column>
<h:outputText value="#{_address.name}" />
</p:column>
<p:column>
<h:outputText value="#{_address.street}" />
</p:column>
<p:ajax event="itemSelect" listener="#{viewBean.onAddressSelected}" update="addressPanel" />
</p:autoComplete>
<p:autoComplete id="street" completeMethod="#{viewBean.autocompleteStreet}" var="_address"
value="#{viewBean.draft.address}" itemValue="#{_address}"
itemLabel="#{_address.street}">
<o:converter converterId="omnifaces.ListConverter" list="#{viewBean.addresses}" />
<p:column>
<h:outputText value="#{_address.name}" />
</p:column>
<p:column>
<h:outputText value="#{_address.street}" />
</p:column>
<p:ajax event="itemSelect" listener="#{viewBean.onAddressSelected}" update="addressPanel" />
</p:autoComplete>
После выбора, другие поля (для других атрибутов адреса) заполняются автоматически. Пока это работает нормально.
Здесь возникает проблема: Я хотел бы разрешить ввод, отличный от любого из выходящего элемента в списке опций (forceSelection="false"
). Предположим, пользователь удаляет существующий адрес, но затем меняет имя улицы и сохраняет ее.
В настоящее время, используя ListConverter, это изменение просто игнорируется, и объект остается прежним.
Поведение, которое я хочу, - это то, что бизнес-объект (viewBean.draft.address
) изменен и сохранен. Другими словами, новый объект больше не является членом списка опций, которые я предоставил конвертеру.
Есть ли способ реализовать это поведение, но при этом использовать преимущества omnifaces.ListConverter
? Или мне нужно полностью писать свой конвертер с нуля?
Так я предполагаю, что вы имели в виду '' List
в качестве возвращаемого типа вместо '' ListМне никогда не приходило в голову, что список, который передается конвертеру, также может быть изменен динамически. Этот подход, похоже, работает, единственный недостаток, который я вижу, заключается в том, что пользователю не нужно использовать предложения автозаполнения и не иметь возможности просто вводить что-то в текстовые поля, которые затем могут быть использованы. Во всяком случае, спасибо большое !!! – schrobe
А, Улица была просто опечаткой, я был отвлечен наполовину, написав ответ, а потом снова посмотрел на ваш вопрос. Он исправлен. Что касается недостатка, вы можете, например, спрятать элемент с помощью CSS. – BalusC