2012-03-27 27 views
1

下面粘贴的代码是一个简单的JSF程序,带有一个命令按钮(在JSP中是一个JSF组件)的概念,点击时应该显示写在托管bean中的消息,然后返回并在JSP中显示消息。一个简单的JSF执行

**perfectJSP.jsp** 

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%> 
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Test Page</title> 
</head> 
<body> 
<f:view> 
<h:form> 
    <h:commandButton value="Click" actionListener="#{Test.clicked}"></h:commandButton> 
</h:form> 
</f:view> 
<h3> This brings us to the end of the program </h3> 
</body> 
</html> 

**Test** (managed bean) 
import javax.faces.event.*; 
public class Test { 
public void clicked(ActionEvent ae) 
{ 
    System.out.println("This is from the bean class"); 
} 
} 

**web.xml** 

<servlet> 
     <servlet-name>Faces Servlet</servlet-name> 
     <servlet-class> 
     javax.faces.webapp.FacesServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet> 
     <servlet-name>faces</servlet-name> 
     <servlet-class> 
     org.apache.myfaces.webapp.MyFacesServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>/faces/*</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
     <servlet-name>faces</servlet-name> 
     <url-pattern>*.jsf</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
     <servlet-name>faces</servlet-name> 
     <url-pattern>*.faces</url-pattern> 
    </servlet-mapping> 

**faces-config.xml** 


<faces-config> 
<managed-bean> 
<managed-bean-name>Test</managed-bean-name> 
<managed-bean-class>Test</managed-bean-class> 
<managed-bean-scope>request</managed-bean-scope> 
</managed-bean> 
</faces-config> 

JBoss是使用的应用程序服务器。无法理解为什么不生成输出。

回答

1

您正在将消息打印到stdout,这通常会在服务器日志中结束。这不会在客户端应该检索的HTML响应中结束。

如果你想在JSF表单显示一些信息提交,有几种方法:

  • 使用FacesContext#addMessage()<h:messages/>。例如。

    <h:form> 
        <h:commandButton value="Click" action="#{Test.clicked}" /> 
        <h:messages /> 
    </h:form> 
    

    public void clicked() { 
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("This is from the bean class")); 
    } 
    
  • 每当消息可用有条件地呈现组件。例如。

    <h:form> 
        <h:commandButton value="Click" action="#{Test.clicked}" /> 
        <h:outputText value="#{Test.message}" rendered="#{not empty Test.message}" /> 
    </h:form> 
    

    private String message; 
    
    public void clicked() { 
        message = "This is from the bean class"; 
    } 
    
    public String getMessage() { 
        return message; 
    } 
    

此外,您的托管bean类不在包。这是绝对不推荐。应该被其他Java类访问的Java类必须放在一个包中。


无关到具体的问题:你使用JSP的工作,因为JSF 2.0近25年前,它被视为过时。 JSP已经被Facelets成功。确保你阅读了最新的JSF书籍/教程。另见our JSF wiki page