2013-02-12 2 views
2

Я пытаюсь использовать SelectItemsConverter с PrimeFaces Picklist.OmniFaces: SelectItemsConverter не работает с PrimeFaces: PickList

XHTML:

<p:pickList id="plUpdateFirma" value="#{bsvttController.dlmFirma}" var="plFirma" 
    itemLabel="#{plFirma.schluesselFirma}" itemValue="#{plFirma}" 
    converter="FirmaConverter"> 

    <f:facet name="sourceCaption"> 
     Vorjahr 
    </f:facet> 
    <f:facet name="targetCaption"> 
     #{bsvttController.selSaison} 
    </f:facet> 

    <p:column> 
     #{plFirma.schluesselFirma} 
    </p:column> 

</p:pickList> 

Преобразователь:

@FacesConverter(value = "FirmaConverter") 
public class FirmaConverter extends SelectItemsConverter 
{ 

    @Override 
    public String getAsString(final FacesContext facesContext, final UIComponent component, final Object object) 
    { 
     return ((Firma) object).getSchluesselFirma(); 
    } 

} 

Bean:

@ManagedBean 
@ViewScoped 
public class BsvttController implements Serializable 
{ 
    private DualListModel<Firma> dlmFirma; 
    private List<Firma> dlmFirmaSource; 
    private List<Firma> dlmFirmaTarget; 
    private Firma firma; 

    @PostConstruct 
    public void init() 
    { 
     dlmFirmaSource = FirmaPersistenz.leseFirmaAlle(); 
     dlmFirmaTarget = new ArrayList<Firma>(); 
     dlmFirma = new DualListModel<>(dlmFirmaSource, dlmFirmaTarget); 
    } 

    public DualListModel<Firma> getDlmFirma() 
    { 
     return dlmFirma; 
    } 
    public List<Firma> getDlmFirmaSource() 
    { 
     return dlmFirmaSource; 
    } 
    public List<Firma> getDlmFirmaTarget() 
    { 
     return dlmFirmaTarget; 
    } 

    public void setDlmFirma(DualListModel<Firma> dlmFirma) 
    { 
     this.dlmFirma = dlmFirma; 
    } 
    public void setDlmFirmaSource(List<Firma> dlmFirmaSource) 
    { 
     this.dlmFirmaSource = dlmFirmaSource; 
    } 
    public void setDlmFirmaTarget(List<Firma> dlmFirmaTarget) 
    { 
     this.dlmFirmaTarget = dlmFirmaTarget; 
    } 

} 

При отладке конвертер я мог видеть, что метод getAsString работает нормально. Но после отправки формы оба arraylists (dlmFirmaSource и dlmFirmaTarget) пусты.

OmniFaces витрина говорит, что

«The omnifaces.SelectItemsConverter позволяет заполнять, например, в раскрывающемся меню со сложными Java объектов модели в качестве значения F: selectItems и имеют JSF конвертировать те автоматически обратно без необходимости предоставить настраиваемый конвертер, который может потребоваться для выполнения задания на основе, возможно, дорогостоящих операций обслуживания/DAO ».

Но в случае компонента PickList не существует f: selectItems tag.

Может ли SelectItemsConverter поддерживать компонент PickList?

ответ

2

Нет, SelectItemsConverter обрабатывает преобразование основных объектов JSF SelectItem для использования с различными компонентами JSF.

Класс DualListModel является специальным классом PrimeFaces, предназначенным для использования с расширенными компонентами данных PrimeFaces. Обходным путем, конечно же, является возможность использования метода @PostConstruct для инициализации DualListModel в управляемом компоненте, чтобы он не требовал конвертера, или вы можете просто реализовать конвертер традиционным способом. Из руководства PrimeFaces по атрибуту converter Списка Пика:

Выражения, эль или буквальный текст, который определяет преобразователь для компонента. Когда это выражение EL , оно разрешено экземпляром преобразователя. В случае, если это статический текст, он должен обратиться к преобразователя ID

+1

На всякий случай, если вы ищете подтверждение, да, maple_shaft прав. '' не использует 'UISelectItem (s)', так что это конец истории. Если вам действительно нужно, подумайте о настраиваемом конвертере, который вводит компонент, поддерживающий модель. – BalusC

4

ли SelectItemsConverter даже поддерживать PickList компонент?

Нет, это не так.

С OmniFaces 1.5 вы можете использовать omnifaces.ListConverter или omnifaces.ListIndexConverter для желаемой цели. См. Также the ListConverter showcase example, который также демонстрирует использование на <p:pickList>.

+0

Я использую Omnifaces 1.8.1 и добавил этот конвертер внутри тегов picklist, но атрибут" list "не найден вы можете посоветовать? –

+2

@Samy: Это динамический атрибут, просто укажите его. Если IDE дергается, игнорируйте его. – BalusC

Смежные вопросы