p:PickList Custom JSF Converter в Spring Boot

в настоящее время я получаю

ClassCastException : com.singtel.eshop.converter.PickListConverter нельзя преобразовать в javax.faces.component.UIComponent при использовании пользовательского преобразователя JSF с p:pickList .

Я использую: Primefaces 4, JSF 2.2.12 и Spring Boot 2.0.3.

Ниже приведен мой код

Конвертер

@FacesConverter("PickListConverter")
@Component("PickListConverter")
public  class PickListConverter  implements Converter  {

public Object getAsObject(FacesContext facesContext, UIComponent component, String submittedValue) {

    PickList p = (PickList)component;
    DualListModel dl = (DualListModel)p.getValue();
    for (int i = 0; i < dl.getSource().size(); i++) {
        if (dl.getSource().get(i).toString().contentEquals(submittedValue)) {
            return dl.getSource().get(i);
        }
    }
    for (int i = 0; i < dl.getTarget().size(); i++) {
        if (dl.getTarget().get(i).toString().contentEquals(submittedValue)) {
            return dl.getTarget().get(i);
        }
    }
    return null;
}

public String getAsString(FacesContext facesContext, UIComponent component, Object value) {
    PickList  p = (PickList) component;
    DualListModel dl = (DualListModel) p.getValue();
    //return  String.valueOf(dl.getSource().indexOf(value));
    return value.toString();
}

}

XHTML:

<p:dialog id="addDialog" header="Add Price Plan Scheme" widgetVar="addDlgl"
          position="600,100" modal="true" appendToBody="true" height="500" width="550">
    <h:form id="addForm">
     <p:selectOneMenu id="type"
                             value="#{bean.label}"
                             style="width:100px; margin-left:10px;">
                <f:selectItems value="#{bean.types}" var="s" 
                    itemValue="#{s.value}" itemLabel="#{s}" />
                <p:ajax update="addForm"
                        listener="#{bean.listener}"
                        global="false"/>
            </p:selectOneMenu>

  <h:panelGrid columns="1" cellpadding="0" style="padding-left:25px"
   rendered="#{bean.label == 'TEST'}">
                <p:pickList id="desc"
                            value="#{bean.list}"
                            style="width:250px !important;" var="data"
                            itemValue="#{data}"
                            itemLabel="#{data.desc}" 
                             responsive="true"
                            showSourceFilter="true" showTargetFilter="true"
                            filterMatchMode="contains"
                            binding="#{PickListConverter}"
                            >
                </p:pickList>
            </h:panelGrid>

Фасоль

 @Component
 @Scope(value="session")
 public class Bean{
private String label;
private DualListModel<DataBean> list;
}

компонент данных

public class DataBean{

   private String desc;
   private String id;

    // getters and setters
}

person Sanket Mishra    schedule 01.03.2019    source источник


Ответы (1)


Удалить

binding="#{PickListConverter}"

Из списка выбора и эта ошибка исчезла

Вы просто добавляете конвертер не через binding, а через атрибут converter или тег f:converter converterId

См. также

person Kukeltje    schedule 01.03.2019
comment
При удалении привязки и изменении ее на конвертер (с полным путем и без него) я получаю 2019-03-01 17:17:24,114 [] ERROR [org.apache.catalina.core.ContainerBase.[Tomcat]. [localhost].[/test].[jsp]] › Servlet.service() для сервлета [jsp] в контексте пути [/test] вызвал исключение [Ошибка выражения: именованный объект: PickListConverter не найден.] с основной причиной javax .faces.FacesException: Ошибка выражения: Именованный объект: PickListConverter не найден. на com.sun.faces.application.ApplicationImpl.createConverter(ApplicationImpl.java:1339) - person Sanket Mishra; 01.03.2019
comment
ОК, при изменении привязки к конвертеру (без снятия скобок EL) все работает. Спасибо за помощь. - person Sanket Mishra; 04.03.2019