2013-05-31 2 views
0

с использованием JSF вызывает NullPointerException:java.lang.NullPointerException на javax.faces.webapp.UIComponentClassicTagBase.setJspId

WARNING: StandardWrapperValve[jsp]: PWC1406: Servlet.service() for servlet jsp threw exception 
java.lang.NullPointerException 
    at javax.faces.webapp.UIComponentClassicTagBase.setJspId(UIComponentClassicTagBase.java:1858) 
    at org.apache.jsp.jsf.list_jsp._jspx_meth_h_form_0(list_jsp.java:112) 
    at org.apache.jsp.jsf.list_jsp._jspService(list_jsp.java:86) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:770) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:411) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:770) 
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) 
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) 
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860) 
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757) 
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056) 
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229) 
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 
    at java.lang.Thread.run(Thread.java:722) 

В моей LIB папки моего GlassFish-сервер и мой динамического веб-проект является следующим банки:

  • стандартного 1.1.2.jar
  • JSTL-JSTL-1.2.jar
  • JSP-апи-2,1
  • JSF-осущ-2.1.7.jar
  • JSF-апи-2.2.0-m03.jar

Мой Bean:

@Stateless 
@Named 
public class StatelessBean { 

    public int getNumberOfMovies() { 
     return 42; 
    } 

    public int getNumberOfPersons() { 
     return 42; 
    } 
} 

Мой JSF:

<%@ 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> 
<link href="../css/basic.css" type="text/css" rel="stylesheet"> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Liste</title> 
</head> 
<body> 
    <h:form> 
     <h1>Stateless</h1> 
     <h:outputText value="Anzahl der Filme: #{StatelessBean.getNumberOfMovies()}" /> 
     <h:outputText value="Anzahl der Personen: #{StatelessBean.getNumberOfPersons()}" /> 
    </h:form> 
</body> 
</html> 

Тенты, представленные здесь: stackoverflow не помогли.

Не знаю, как решить это.

+0

Я никогда не видел названия фанов, начиная с шапок внутри представления ... Также вы должны использовать 'xmlns' вместо' taglib'. –

+0

фасоль, начинающаяся с колпачков, была попыткой ... без шапки его также nullpointerexception. и почему xmlns? – Mulgard

+2

Пожалуйста, прочтите JSF 2.0 книги/учебники/ресурсы, если вы хотите изучить JSF 2.0, а не JSF 1.x. Вы используете JSP, который устарел после JSF 2.0 более 3 лет назад. Это означает, что вы читали полностью устаревшие книги/учебники/ресурсы. Кроме того, наличие файлов 'standard-1.1.2.jar' и' jsp-api-2.1.jar' в вашем '/ WEB-INF/lib' страшно.Ваш JSF API и JAR-файлы JAR также несовместимы в версиях. Почему именно вы это сделали? Чтение плохих уроков? Стрельба в темноте? Эти файлы могут вызвать проблемы с переносимостью. – BalusC

ответ

4

Вы должны изменить свой вид код, как это:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 
    <h:head> 
     <link href="css/basic.css" type="text/css" rel="stylesheet"> 
     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
     <title>Liste</title> 
    </h:head> 
    <h:body> 
     <h:form> 
      <h1>Stateless</h1> 
      <h:outputText value="Anzahl der Filme: #{statelessBean.getNumberOfMovies()}" /> 
      <h:outputText value="Anzahl der Personen: #{statelessBean.getNumberOfPersons()}" /> 
     </h:form> 
    </h:body> 
</html> 

Это путь в JSF провозглашают библиотеки тегов.

Вам также потребуется изменить некоторые конфигурации в вашем web.xml и переименовать файл yourfile.xhtml:

<context-param> 
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name> 
    <param-value>.xhtml</param-value> 
</context-param> 

<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
</servlet> 

<!-- Use prefix mapping for Facelets pages, e.g. http://localhost:8080/webapp/yourfile.jspx --> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jspx</url-pattern> 
</servlet-mapping> 

Чтобы использовать компонент в выражениях EL, вы должны изменить это так:

@ManagedBean 
@RequestScoped 
public class StatelessBean { 

    public int getNumberOfMovies() { 
     return 42; 
    } 

    public int getNumberOfPersons() { 
     return 42; 
    } 
} 

Подробнее:

+0

Не работает jsf с jsp use taglibs? – Adarsh

+0

Но это также не работает: org.apache.jasper.JasperException: /jsf/list.jsp(25,43) PWC6228: # {...} не разрешено в тексте текста шаблона. – Mulgard

+0

Хорошо, я получаю хотя бы выход. Но -> no css работает -> my "statelessBean.getNumberOfMovies()" не работает (нет вывода) – Mulgard

0

Попробуйте изменить вызов getNumberOfMovies. JSF тихо добавляет слово «get» и скобки «()» к значению в вашем html. Идея заключается в том, что вы пишете геттеры и сеттеры, а затем просто называете это свойство, а JSF называет соответствующий.

<h:outputText value="Anzahl der Filme: #{statelessBean.numberOfMovies}" /> 
     <h:outputText value="Anzahl der Personen: #{statelessBean.numberOfPersons}" /> 

Однако это вызывает свойствоNotFoundException. Это также может быть причиной вашего нулевого указателя, но я не уверен.

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