Первичные автозаполнения ClassCastException

Я использую Spring 3, Hibernate 4 и JSF 2.0 и пытаюсь сделать автосоздание.

У меня есть следующий класс DAO для получения значений из функции Oracle

@Override
    public List getEmployeeDetails(String employeeNumber) {

        List query = (List)entityManager.createNamedQuery("getEmp")
                .setParameter("empNumber", employeeNumber)
                .getSingleResult();

        return query;

    }

Класс конвертера

public EmployeeNameConverter(

            List employeeDB, EmployeeDetailService instance,
                    String employeeNumber) {
                if (employeeDetailService == null) {
                    employeeDetailService = instance;
                }
                if (param == null) {
                    param = employeeNumber;
                }
                this.employeeDB = employeeDB;
            }

@Override
    public Object getAsObject(FacesContext arg0, UIComponent arg1,
            String submittedValue) {
        if (submittedValue.trim().equals("")) {
            return null;
        } else {
            try {
               //int number = Integer.parseInt(submittedValue);
                employeeDB = getEmployeeDetailService().getEmployeeDetails(param);
                for (EmployeeDetail emp : employeeDB) {
                    if (emp.getEmployeeNumber() == submittedValue) {
                        return emp;
                    }
                }

            } catch (NumberFormatException exception) {
                throw new ConverterException(new FacesMessage(
                        FacesMessage.SEVERITY_ERROR, "Conversion Error",
                        "Not a valid employee"));
            }
        }

В моей Managedbean

I have complete method where I am passing employeeDetailService to my Класс конвертера.

public List complete(String query) {
        List suggestions;
        suggestions = new ArrayList();
        try {
            employee =  (List) new EmployeeNameConverter(
                    employeeList, employeeDetailService, query);

            for (EmployeeDetail p : employee) {
                if (p.getEmployeeNumber().startsWith(query))
                    suggestions.add(p);
            }
        } catch (Exception e) {
            System.out.println("exc " + e.getMessage());
            e.printStackTrace();
        }

        return suggestions;
    }

Код JSF


Когда я печатаю символы, я получаю исключение

EmployeeNameConverter cannot be cast to java.util.List
java.lang.ClassCastException: net.test.util.EmployeeNameConverter cannot be cast to java.util.List

Как я могу это решить? Это правильный подход или кто-то любезно предлагает лучший подход к достижению того же?

Обновление 1

@Override
    public List getEmployeeDetails(String employeeNumber) {

        List query = (List)entityManager.createNamedQuery("getEmp")
                .setParameter("empNumber", employeeNumber)
                .getSingleResult();

        return query;

    }

<Сильный> Exception

net.test.entity.EmployeeDetail cannot be cast to java.util.List
java.lang.ClassCastException: net.test.entity.EmployeeDetail cannot be cast to java.util.List
    at net.test.dao.EmployeeDetailDAOImpl.getEmployeeDetails(EmployeeDetailDAOImpl.java:36)

и строка исключения

List query = (List)entityManager.createNamedQuery("getEmp")
                    .setParameter("empNumber", employeeNumber)
                    .getSingleResult();
0
nl ja de
@kolossus Как я могу ссылаться на переменную employee класса конвертера? Потому что, если я непосредственно даю в качестве сотрудника, тогда я получу ошибку, так как мой
добавлено автор user75ponic, источник
@fischermatte Я изменил на convert = "# {employeeNameConverter}, по-прежнему ту же ошибку. Передаю службу классу Converter, потому что это не управляемый компонент, поэтому, если я не передаю объект службы, я не смог бы получить доступ к методу DAO в классе конвертера.
добавлено автор user75ponic, источник
@kolossus Cast исключается в этой строке employee = (List ) new EmployeeNameConverter (employeeList, employeeDetailService, query);
добавлено автор user75ponic, источник
@kolossus Итак, из вашего предыдущего комментария, точка номер один - это путь?
добавлено автор user75ponic, источник
@kolossus Я поставил '@Named ("name")' '@ViewAccessScoped', сделанный в классе конвертера. Теперь я получаю другое classcastexception в классе DAO. Я поместил детали как «Обновление», отредактировав мой оригинальный вопрос.
добавлено автор user75ponic, источник
@kolossus Мне удалось разрешить все исключения, пока осталось немного работы. Если вы можете любезно предоставить ответ на ваши комментарии, я буду рад и рад принять его. Большое спасибо
добавлено автор user75ponic, источник
@kolossus Мне удалось разрешить все исключения исключений, и он работает нормально, конечно, нужно сделать небольшую настройку. Как я уже упоминал в своем предыдущем комментарии, если вы могли бы дать ответ на то, о чем вы упоминали в своих комментариях, я буду счастлив и рад принять его.
добавлено автор user75ponic, источник
Предполагается, что p.employee является реализацией конвертера или DTO?
добавлено автор kolossus, источник
@Polppan, Чтобы устранить вероятные причины, 1) аннотировать ваш конвертер с помощью @ManagedBean , чтобы иметь возможность вводить источник данных (возможно, EJB?). 2) Попробуйте реорганизовать ваш конвертер, чтобы обойтись без аргументов конструктора. Это единственный момент в вашем коде, где конвертер имеет какое-либо отношение к списку (я думаю), и, судя по исключению, это список, который вызывает преобразование для дросселя. Можете ли вы также точно определить, в какой момент кода преобразования генерируется исключение?
добавлено автор kolossus, источник
@Polppan, ну есть твоя проблема. У вас нет абсолютно никакого бизнеса, создающего экземпляр конвертера вручную, а тем более пытающегося передать его в List любого типа. Это обязанность контейнера управлять и создавать экземпляр конвертера.
добавлено автор kolossus, источник
@Polppan, да, это так. Это не лучшая практика (я, кажется, забыл, что именно), но это сработает.
добавлено автор kolossus, источник
@Polppan, нам может понадобиться продолжить это в чате в ближайшее время, но причина вашего исключения довольно проста, ваш запрос JPA возвращает объект типа EmployeeDetail , и вы пытаетесь отбросить его на List . Зачем?
добавлено автор kolossus, источник
почему вы хотите, чтобы конвертер был свойством в сервисе? это, безусловно, неправильный подход. конвертер должен быть подключен только обычным способом, например converter = "# {employeeNameConverter} . Полный метод должен просто искать список EmployeeDetails.
добавлено автор fischermatte, источник
поскольку вы используете весну - вы можете определить конвертер в виде компонента (через xml или с помощью аннотации @Component). после этого вы можете вводить в конвертер другие бобы, такие как ваши DAO или сервисы. обратите внимание, что вам нужно зарегистрировать SpringBeanFacesELResolver в faces-config.xml, чтобы получить доступ к весенним бобам из страниц JSF через EL.
добавлено автор fischermatte, источник

1 ответы

Здесь есть две основные проблемы:

  1. You're attempting to instantiate and manage a JSF converter instance by hand. Don't do this. The converter is a construct designed for use by the JSF context only. It's not the job of you the developer to call new or supply constructor arguments to the converter class. Implement a simple converter per this example and configure on the

    From your comments, the reason you've taken to managing the converter by hand is to be able to access your DAO layer. As a workaround, you can add @ManagedBean to your converter and JSF will treat is as a managed bean and a converter. Being a managed bean, you'll now be able to inject your DAO resource into it. This is not best practice, but only a workaround. This limitation on converters will be removed in JSF2.2 though :).

  2. While manipulating the converter, you're attempting to treat it like a regular POJO and trying to cast it into several incompatible types as a result

    employee = (List) new EmployeeNameConverter( employeeList, employeeDetailService, query); //EmployeeNameConverter !instanceof EmployeeDetail
    
2
добавлено
Большое спасибо за ваши ценные комментарии и решения.
добавлено автор user75ponic, источник
@Polppan, добро пожаловать, это было мое удовольствие
добавлено автор kolossus, источник
JavaScript Jobs — чат
JavaScript Jobs — чат
8 336 участник(ов)

JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

JavaScript.ru
JavaScript.ru
7 932 участник(ов)

Сообщество сайта JavaScript.ru в Slack.

pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
3 269 участник(ов)

Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
2 484 участник(ов)

Чат для новичков

javascript_ru
javascript_ru
915 участник(ов)

Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

Spring Framework and more
Spring Framework and more
839 участник(ов)

чат о spring framework и связанных с ним технологиях. We're discussing: job, tech questions, beer meet up/networking: tech review ,LinkedIn skills, SOF q/a raise up& etc. languages: russian,java,eng.

jsChat
jsChat
603 участник(ов)

Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

JavaScript for Zombies Chat
JavaScript for Zombies Chat
492 участник(ов)

Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

All That JS
All That JS
417 участник(ов)

JS на русском