При обновлении JSF-версии старого веб-приложения с MyFaces 1.1 до MyFaces 2.2.12 я пытаюсь заменить записи <managed-bean>
в моем файле faces-config.xml
аннотациями @ManagedBean
непосредственно в классах компонентов. Я использую Миграцию с JSF 1.2 на JSF 2.0 в качестве общего руководства по миграции.
Например, я заменяю что-то вроде
<managed-bean>
<managed-bean-name>MyBean</managed-bean-name>
<managed-bean-class>some.package.MyBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
с участием
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class MyBean {
Согласно Будет ли два экземпляра компонента, если я напишу аннотацию @managed bean и определю ее в Faces-config.xml, аннотации будут перезаписаны соответствующими записями в faces-config.xml
, поэтому я удалил элемент <managed-bean>
в мой faces-config.xml
.
Поскольку проект состоит из нескольких модулей maven, которые упакованы в виде банок по отдельности перед развертыванием в виде комбинированного файла войны, я также попытался последовать совету из Как JSF находит bean-компоненты с аннотацией @ManagedBean? и добавил еще одну папку META-INF
, содержащую faces-config.xml
, в подмодуль, содержащий bean-компонент, в следующем месте (с учетом принятый ответ в Как ссылаться на управляемые компоненты JSF, которые предоставлены в файле JAR?):
MainProject
| SubModule
| |src
| | main
| | resources
| | META-INF
| | faces-config.xml
со следующим содержанием:
<faces-config
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
version="2.2">
</faces-config>
К сожалению, я все еще получаю следующую ошибку при попытке открыть страницу, использующую этот конкретный компонент:
javax.el.PropertyNotFoundException: Target Unreachable, identifier 'MyBean' resolved to null
Поскольку я использую JSF для управления bean-компонентами, я следовал части инструкций JSF в Идентификация и решение javax.el.PropertyNotFoundException: Target Unreachable, но даже после проверки отдельных точек, упомянутых там, я все равно получаю ту же ошибку.
Я использую Tomcat 7 в качестве контейнера сервлетов, который, согласно http://tomcat.apache.org/whatversion.html — поддерживает спецификацию сервлета до версии 3.0, чего, в свою очередь, должно хватить для JSF 2.2, для которого, если я правильно понимаю, требуется как минимум спецификация сервлета 2.5, согласно http://myfaces.apache.org/core22/.
Я уже довольно много искал причину проблемы (как уже упоминалось, я пробовал несколько статей SO, упомянутых выше), но до сих пор не могу решить проблему. Буду очень благодарен за любую помощь!
@ManagedBean
устарела в пользу использования CDI@Named
. Разве сейчас не самое подходящее время, чтобы переключиться на это напрямую вместо @ManagedBean? - person Kukeltje   schedule 23.05.2017@Named
, но столкнулся со многими другими проблемами. Но, возможно, вы правы, и я должен попытаться решить эти проблемы вместо того, чтобы заставить работать что-то, что скоро устареет. - person scholt   schedule 23.05.2017