2014-11-14 3 views
0

Я получаю класс произнесения Exception вjava.lang.ClassCastException: com.model.Image не может быть приведен к java.lang.String

java.lang.ClassCastException: com.model.Image не может быть приведен к java.lang.String

Ниже моя функция, чтобы получить данные из таблицы MySQL, созданной с помощью класса сущностей из JPA

public List<Image> complete(String fileName) 
{ 
    List<Image> queryResult = new ArrayList<Image>(); 
    System.out.println("File Name is : "+fileName); 
    if (allImages == null) 
    { 
     System.out.println("Yeah I am coming here"+allImages);   
     allImages = imageFacade.findAll(); 
    }  
    allImages.removeAll(servicesWithImage.getImage()); 
    for (Image image : allImages) 
    { 
     if (image.getFileName().toLowerCase().contains(fileName.toLowerCase())) 
     { 
      queryResult.add(image); 
     } 
    } 

    return queryResult; 
} 

Я определил allImages во всем мире как

private List<Image> allImages; 

выше полный метод Я зову от p:autoComplete из Primefaces, который

<p:autoComplete forceSelection="true" 
       minQueryLength="3" 
       value="#{servicesMB.image}" 
       label="#{msgs.image}" 
       required="true" 
       var="image" 
       itemLabel="#{image.fileName}" 
       itemValue="#{image}" 
       completeMethod="#{servicesMB.complete}" 
       dropdown="true" /> 

Метод FindAll в полном метод показан ниже:

public List<T> findAll() 
{ 
    CriteriaQuery cq = em.getCriteriaBuilder().createQuery(); 
    cq.select(cq.from(entityClass)); 
    return em.createQuery(cq).getResultList(); 
} 

Если я поместил заявление о печати в полный метод, я получаю все необходимые данные bu т данные не показаны на p:autoComplete, а также я получаю ClassCastException

Я редактировать мой выше полный метод с заявлениями для печати, которые что-то выглядит как

public List<Image> complete(String fileName) 
{ 
    List<Image> queryResult = new ArrayList<Image>(); 
    if (allImages == null) 
    { 
     System.out.println("I am in If Condition"); 
     allImages = imageFacade.findAll(); 
     System.out.println("The Value of allImages : "+allImages); 
    } 
    System.out.println("Getter function servicesWithImage"+servicesWithImage.getImage()); 
    allImages.removeAll(servicesWithImage.getImage()); 
    System.out.println("allImages after removeAll method"+allImages); 

    for (Image image : allImages) 
    { 

     if (image.getFileName().toLowerCase().contains(fileName.toLowerCase())) 
     { 
      queryResult.add(image); 
     } 
    } 
    System.out.println("At the End The Value of queryResult"+queryResult); 
    return queryResult; 
} 

Мой выход (отображается только для метода):

02:58:56,104 INFO [stdout] (http-localhost-127.0.0.1-8080-5) I am in If Condition 
02:58:56,121 INFO [stdout] (http-localhost-127.0.0.1-8080-5) The Value of allImages : [services_2.jpg, services_3.jpg] 
02:58:56,122 INFO [stdout] (http-localhost-127.0.0.1-8080-5) Getter function servicesWithImage[] 
02:58:56,122 INFO [stdout] (http-localhost-127.0.0.1-8080-5) allImages after removeAll method[services_2.jpg, services_3.jpg] 
02:58:56,123 INFO [stdout] (http-localhost-127.0.0.1-8080-5) At the End The Value of queryResult[services_2.jpg, services_3.jpg] 
02:58:56,130 SEVERE [javax.enterprise.resource.webcontainer.jsf.context] (http-localhost-127.0.0.1-8080-5) 
java.lang.ClassCastException: com.model.Image cannot be cast to java.lang.String 

Помощь ...

ответ

1

Вероятно, это связано с автозаполнения.

Автозаполнение похоже на выбор, он не может управлять объектами сам по себе, нуждается в конвертере, и этот конвертер должен иметь возможность конвертировать объект Image в String и снова преобразовывать эту строку в изображение.

Вы можете увидеть подробное объяснение здесь https://stackoverflow.com/a/8001418/4253629]1

+0

Потребовалось немного больше времени, чтобы понять решение, но было правильное решение Большое спасибо – Zaheer

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