0

我正在尝试为家庭作业设计一个简单的 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>

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

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 视频,这一切似乎都应该是有意义的。任何见解都会很棒!

4

2 回答 2

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}.

于 2013-06-13T08:29:19.773 回答
0

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

properties.javaVersion
properties.osName
properties.osVersion

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

于 2013-06-13T08:37:57.743 回答