2010-11-29 4 views
0

Мы работаем над нашим первым проектом JSF, и у нас есть некоторые проблемы. Мы делаем функциональность входа в систему, и когда мы поражаем кнопку входа в систему, он бросает:Навигационный блок, не работающий в JSF

  • IllegalArgumentException - нуль источник

  • NullPointerException - Servlet.service() для сервлета [Лица Servlet] в контексте с пути [/ JSF-пробел] бросил исключение

есть ли у вас какие-либо идеи, почему это не работает? Пожалуйста, просветите нас.

Вот из фасоли Пользователь:

public class User 
{ 
    private long id; 
    private String username; 
    private String password; 

    public User() 
    { 
    } 

    public User(String username, String password) 
    { 
     this.username = username; 
     this.password = password; 
    } 

    public User(long id, String username, String password) 
    { 
     super(); 
     this.id = id; 
     this.username = username; 
     this.password = password; 
    } 

    public String getNextPage() 
    { 

     return "failure"; //or "admin" or "client" 
    } 

    public long getId() 
    { 
     return id; 
    } 

    public void setId(long id) 
    { 
     this.id = id; 
    } 

    public String getUsername() 
    { 
     return username; 
    } 

    public String getPassword() 
    { 
     return password; 
    } 

    public void setUsername(String username) 
    { 
     this.username = username; 
    } 

    public void setPassword(String password) 
    { 
     this.password = password; 
    } 
} 

Наша страница login.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>Login</title> 
</head> 
<body> 
<f:view> 
    <h:form> 
     Username: <h:inputText value="#{userBean.username}"></h:inputText> 
     <br /> 
     Password: <h:inputText value="#{userBean.password}"></h:inputText> 
     <br /> 
     <h:commandButton value="Login" action="#{userBean.getNextPage}" ></h:commandButton> 
    </h:form> 
</f:view> 
</body> 
</html> 

Наши лица-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"> 

    <managed-bean> 
     <managed-bean-name>userBean</managed-bean-name> 
     <managed-bean-class>data_layer.model.User</managed-bean-class> 
     <managed-bean-scope>session</managed-bean-scope> 
    </managed-bean> 

    <navigation-rule> 
     <from-view-id>/login.jsp</from-view-id> 
     <navigation-case> 
      <from-action>#{userBean.getNextPage}</from-action> 
      <from-outcome>admin</from-outcome> 
      <to-view-id>/admin.jsp</to-view-id> 
     </navigation-case> 
     <navigation-case> 
      <from-action>#{userBean.getNextPage}</from-action> 
      <from-outcome>failure</from-outcome> 
      <to-view-id>/failure.jsp</to-view-id> 
     </navigation-case> 
     <navigation-case> 
      <from-action>#{userBean.getNextPage}</from-action> 
      <from-outcome>client</from-outcome> 
      <to-view-id>/client.jsp</to-view-id> 
     </navigation-case> 
    </navigation-rule> 
</faces-config> 

Наша web.xml:

<?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> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>*.jsf</url-pattern> 
    </servlet-mapping> 

    <context-param> 
     <param-name>javax.faces.CONFIG_FILES</param-name> 
     <param-value>/WEB-INF/faces-config.xml</param-value> 
    </context-param> 
    <context-param> 
     <param-name>javax.faces.PROJECT_STAGE</param-name> 
     <param-value>Development</param-value> 
    </context-param> 
    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
     <!-- <welcome-file>index.html</welcome-file> --> 
    </welcome-file-list> 
</web-app> 

И наша структура каталогов: alt text

ответ

3

Вы перемешивая JSF 1.x и 2.x JSF подходы. Может быть, вы читаете устаревшую книгу/учебник, ориентированный на JSF 1.x, в то время как среда IDE является автогенерирующей JSF 2.x?

JSF 2.0 больше не поддерживает JSP. Унаследованный JSP преуспел в Facelets, который предлагает гораздо более высокие возможности шаблонов. Хотя вы можете настроить JSF 2.0 для использования винтажного JSP снова, я настоятельно рекомендую не делать этого. Скорее переписать login.jsp в login.xhtml:

<!DOCTYPE html> 
<html lang="en" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
     <title>Login</title> 
    </head> 
    <body> 
    <h:form> 
     Username: <h:inputText value="#{userBean.username}" /> 
     <br /> 
     Password: <h:inputText value="#{userBean.password}" /> 
     <br /> 
     <h:commandButton value="Login" action="#{userBean.getNextPage}" /> 
    </h:form> 
</body> 


Unrelated проблемы с JSF 2.0 Вы можете также get rid всей faces-config.xml, как вы в настоящее время. Добавьте следующие javax.faces.bean аннотации к User класса:

@ManagedBean(name="userBean") 
@RequestScoped 
public class User { 
    // ... 
} 

С новой неявной навигации, результат будет по умолчанию трактуется как имя файла вида. Вы уже сделали это хорошо, так что вам вообще не нужны эти правила навигации.

Смежные вопросы