无法使用JSF解析Spring属性值

时间:2016-08-12 14:45:51

标签: spring jsf

我尝试将JSF与Spring集成,因此我的代码非常简单:

Manged Bean

@ManagedBean(name = "userData")
@SessionScoped
public class UserData implements Serializable {

   private static final long serialVersionUID = 1L;

private String message;

   public String getMessage() {
      return message;
   }

   public void setMessage(String message) {
      this.message = message;
   }

   public String getGreetingMessage(){
      return getMessage();
   }
}

的applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<bean id="messageService"   class="test.UserData">
      <property name="message" value="Hello World" />        
   </bean>
</beans>

Web.xml中

<!-- Add Support for Spring -->
    <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>

faces-config.xml中

<?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>
        <!-- SpringBeanFacesELResolver -->
        <el-resolver>
            org.springframework.web.jsf.el.SpringBeanFacesELResolver
        </el-resolver>
    </application>
</faces-config>

home.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"   
   xmlns:h="http://java.sun.com/jsf/html">
   <h:head>
      <title>Spring with JSF</title>
   </h:head>
   <h:body>
    #{userData.greetingMessage}
   </h:body>
</html> 

问题,当我运行home.xhtml我没有得到按摩的价值! 它只显示空白页面。它似乎无法从ApplicationContext.xml获取message属性的值。

我的方法有什么问题以及如何解决?

1 个答案:

答案 0 :(得分:0)

由于您让Spring使用SpringFacesELResolver管理JSF bean,因此不需要JSF注释。

public class UserData implements Serializable {

    private static final long serialVersionUID = 1L;

    private String message;

    public String getMessage() {
      return message;
    }

   public void setMessage(String message) {
      this.message = message;
   }

}

并且,在 applicationContext.xml 中(注意session scope):

<bean id="userData" class="test.UserData" scope="session">
  <property name="message" value="Hello World" />        
</bean>

以这种方式访问​​:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"   
   xmlns:h="http://java.sun.com/jsf/html">
   <h:head>
      <title>Spring with JSF</title>
   </h:head>
   <h:body>
    #{userData.message}
   </h:body>
</html> 

如果正确配置了JSF servlet,应该提供 Hello World HTML输出。