Интеграция Spring-JSF2: цель недоступна, идентификатор customerBean преобразован в ноль - PullRequest
2 голосов
/ 25 сентября 2011

Я пытаюсь выполнить простую интеграцию Spring 3 и JSF 2, используя только аннотации (не используя face-config.xml для определения управляемых bean-компонентов), и застрял с ошибкой.

Ошибка:

javax.el.PropertyNotFoundException: /customer/add.xhtml @11,70 value="#{customerBean.firstName}": Target Unreachable, identifier 'customerBean' resolved to null

Это страница: add.xhtml

<h:body>
    <h:form>
        <label>First Name <h:inputText value="#{customerBean.firstName}" /></label><br />
        <label>Last Name <h:inputText value="#{customerBean.lastName}" /></label><br />
        <label>Email <h:inputText value="#{customerBean.email}" /></label><br />
        <h:commandButton value="Add" action="#{customerBean.add}" />
    </h:form>
</h:body>

Это bean-компонент: CustomerBean.java

package com.devworkzph.customer.sample.bean;

@Component
@Qualifier("customerBean")
@SessionScoped
public class CustomerBean implements Serializable{
    private String firstName;
    private String lastName;
    private String email;

    public String add(){
        // code
    }
    //getters and setters
}

Это часть моегоapplicationContext.xml

<context:annotation-config />
<context:component-scan base-package="com.devworkzph.customer.sample" />

Это часть моего web.xml

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
    classpath:applicationContext.xml
</param-value>
</context-param>
<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
  <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>

Кто-нибудь знает, что я здесь не так делаю?

Спасибо!

1 Ответ

0 голосов
/ 25 сентября 2011

Я только что изменил CustomerBean.java, чтобы иметь следующие аннотации:

@Component
@Scope("session")

Затем добавили SpringBeanFacesELResolver вface-config.xml. Я уже закомментировал это раньше, не зная, что мне это нужно, даже если я не буду использовать face-config для определения CustomerBean.

<?xml version="1.0"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
   version="2.0">

  <application>
  <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
  </application>
</faces-config>
...