Java Bean getter不返回值

时间:2013-06-13 08:28:22

标签: java jsf java-ee jsf-2

我正在尝试为家庭作业设计一个简单的java bean / xhtml设置。实现看起来很简单,但我无法让GlassFish从java bean中提取信息并将其显示在HTML中。

我编写了我的代码,然后创建了一个war文件并将其加载到GlassFish自动部署中。

这是index.xhtml:

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
   xmlns:h="http://java.sun.com/jsf/html">
   <h:head>
      <title>System information</title>
   </h:head>
   <h:body>
      <h:form>
        <p>           
            This system's java version is #{properties.getJavaVersion}
        </p>
        <p>
        This sytem's OS Name is #{properties.getOsName}
        </p>
        <p>
        This System's OS version is #{properties.getOsVersion}
        </p>
     </h:form>
  </h:body>
</html>

这是我的properties.java文件位于root / WEB-INF / classes / com / stansbury /

package com.stansbury;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ViewScoped
@ManagedBean

public class Properties {

public String javaVersion;
public String osName;
public String osVersion;

public String getJavaVersion() {
    javaVersion = System.getProperty("java.version");
    return javaVersion;
}

public String getOsName() {
    osName = System.getProperty("os.name");
    return osName;
}

public String getOsVersion() {
    osVersion = System.getProperty("os.version");
    return osVersion;
}

}

这是我的web.xml文件,位于root / WEB-INF /

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   version="2.5">
 <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
 </servlet>
 <servlet-mapping>
   <servlet-name>Faces Servlet</servlet-name>
   <url-pattern>/faces/*</url-pattern>
 </servlet-mapping>
 <welcome-file-list>
    <welcome-file>faces/index.xhtml</welcome-file>
 </welcome-file-list>
 <context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
 </context-param>
</web-app>

最后但并非最不重要的是我的faces-config.xml文件位于root / META-INF:

<?xml version="1.0" encoding="UTF-8"?>
<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">
</faces-config>

我在屏幕上看到的是“系统的操作系统名称是”,然后是空白。其他两个值也是一样的。我创建了一个传统的应用程序来确保System.getProperties在我的计算机上运行。我也用不同的字符串初始化了properties.VALUES,只是为了确保。在过去的六个小时里,我一直在墙上敲我的头。再次,根据我研究过的不同教程,教科书和YouTube视频,这一切似乎都应该有意义。任何见解都会很棒!

2 个答案:

答案 0 :(得分:1)

这是使用EL访问bean属性的错误方法:

This system's java version is #{properties.getJavaVersion}

应该是

This system's java version is #{properties.javaVersion}

由于getJavaVersion()是getter,因此EL将查找javaVersion属性。同样适用于其他领域。如果你有一个bean类:

public class Foo {
   int bar;

   public int getBar(){
     return bar;
   }
}

bar属性应以#{bean.bar}

的形式访问

答案 1 :(得分:0)

您必须使用EL language才能访问bean字段。 这意味着要调用bean的getter,你必须使用getter方法,但没有标准前缀,即get / is。 因此你应该在xhtml中使用:

properties.javaVersion
properties.osName
properties.osVersion

请注意,xhtml不直接读取字段中的值,它只读取getters方法。