Подтвердить что ты не робот

Intellij не разрешает переменные el в рамках проверки кода JSP или автозаполнения

Подводя итог приведенному здесь отвечу Кодировка в (jsp/jstl) представлении для Spring объектов модели MVC в Eclipse не работает для меня вообще, есть ли настройка, которую мне нужно изменить?

Я только что загрузил образец spring-mvc-showcase в github, и он не работает из коробки в этом проекте (с либо версии 11.1.3, либо версии EAP 12 как для всех корпоративных изданий), см. ниже (я понятия не имею, откуда он получает формуBean):

fruit and foo, both work, but not available as autocomplete options

Вот пример из моего собственного проекта, снимок экрана ниже (нижний кадр) показывает, что мой контроллер добавляет строковый атрибут к модели и возвращает правильное имя вида. Тогда я ожидал, что shopString будет предлагаться как опция автозаполнения при редактировании этого представления, однако это не так: JSP shown abover controller, the autocomplete offered up when "s" typed

sg - переменная javascript - так здорово, что она должна быть там, но где "shopString"?. Есть ли параметр, который мне нужно изменить, или что-то еще, что мне не хватает, чтобы получить эту функциональность (используя 11.1.3 корпоративную версию со всеми плагинами Spring).

Он также терпит неудачу по Spring определенным переменным: enter image description here

Является ли их открытым исходным кодом (один из Spring учебных проектов?), где это определенно работает... или есть параметр, который мне нужно изменить в моей установке Intellij (я протестировал с новой загрузкой версии 12 EAP)?

Следующий скриншот показывает все мои файлы Spring coifg, правильно настроенные с помощью автоопределения, но проверка кода не выполняется... это spring-mvc-showcase: code inspection and spring config

4b9b3361

Ответ 1

Существует стандартный способ сделать это, что не является специфичным для IntelliJ.

<jsp:useBean id="someModel" scope="request" type="foo.bar.SomeModelClass"/>

Атрибут type здесь не обязательно должен быть конкретным классом, он также может быть типом интерфейса. Обычно вы добавляете эти объявления в начале ваших JSP/JSPX файлов, чтобы обеспечить что-то вроде "объявления входов модели".

Использование JSP в такой декларативной форме было рекомендовано в оригинальной книге Spring, фактически (Expert One-on-One J2EE Design and Development.). IntelliJ обеспечивает полное завершение кода для таких страниц с по меньшей мере 7 лет.

Обратите внимание, что в IntelliJ есть дополнительные соответствующие удобные функции: если ссылка на переменную EL отмечена как undefined, вы можете нажать Alt-Enter, чтобы выбрать QuickFix, в который будет добавлено объявление, как указано выше. Он даже попытается выяснить фактический тип, основываясь на свойствах, к которым вы обращаетесь.

Ответ 2

Как я понимаю Spring, для определений переменных, которые вы можете поместить в свою модель, не существует декларации. Вызов model.addAttribute() может добавить объект к модели, либо идентифицированный параметром, либо автоматически генерируемый именем класса объекта.

Итак, представьте себе следующий случай, когда у вас есть несколько методов:

@RequestMapping("foo") public String foo(Model model) { 
    model.addAttribute("model", new Foo());
    return new Random().nextBoolean() ? "page" : "someOtherPage";
}
@RequestMapping("bar") public String bar(Model model) { 
    model.addAttribute("model", new Bar());
    model.addAttribute("model", new Foo());
    model.addAttribute("model", new Bar());
    return new Random().nextBoolean() ? "page" : "someOtherPage";
}

а JSP - что-то вроде

<c:out ${model.value} />

Так как нет правильного отображения того, какие контроллеры могут при определенных обстоятельствах перенести на какие точки зрения и что точно лежит в модели, ваша IDE не имеет реальной возможности предоставить вам правильную информацию.

Но для поддержки IDE, предлагая вам полезную информацию, вы можете использовать подсказки типов. Поэтому вам нужно скопировать всю ссылку объекта, например. г. foo и добавьте комментарий JSP, например:

<%[email protected] id="foo" type="com.mycompany.SomeObject"--%>

Предупреждение исчезнет, ​​и полная поддержка IDE будет на вашей стороне, позволяя пересекать поля foo. Одна из самых приятных вещей - то, что неиспользуемые предупреждения геттера тоже исчезнут. Вы можете напрямую вызвать действие показать использование непосредственно из JSP или POJO.

Это также работает с JSF и особенно в JSF-компонентах. Довольно аккуратная функция для завершения такого рода кода, показывающая предупреждения и ошибки.

Надеюсь, что это поможет вам с переходом на Intellij Idea.

Изменить: Я также сообщил об этом находке другу, который завернул все это в приятную запись в блоге. Возможно, вам интересно прочитать его: открыть ссылку

Ответ 3

Это исправлено в последней версии intellij 122.694

Ответ 4

Я столкнулся с подобной проблемой, когда начал писать свой собственный перехватчик. Проблема заключалась в том, что я начал использовать refference в моей конфигурации с разрешением распознавателя xml issue

не используйте такую ​​конструкцию

<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" ref="prefix"/>
    <property name="suffix" ref="suffix"/>
</bean>-