java.lang.NullPointerException: Argument Fehler: Parameter-id ist null
Ich lese eine Java-EE-7-Buch "Java EE 7 Recipes" von Josh Juneau. Ich versuche zu laufen einige Beispiel-code aus Kapitel 3 (Rezept 3.5 ) test der bedingten navigation. Der code ist sehr simpel und unkompliziert, aber leider bin ich immer sehr seltsam Verhalten.
JSF-Seite-Skript ist unten angegeben:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>Login Test</title>
</h:head>
<h:body>
<h:form id="resourceTest">
<h1>Login</h1>
<h:commandButton id="loginButton" action="#{loginTest.login}" value="Login" />
</h:form>
</h:body>
</html>
und die JSF-Managed-Bean:
package com.test.controller;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean
@RequestScoped
public class LoginTest {
private boolean authenticated;
public LoginTest() {
authenticated = false;
}
public boolean isAuthenticated() {
return authenticated;
}
public void setAuthenticated(boolean authenticated) {
this.authenticated = authenticated;
}
public void login(){
setAuthenticated(true);
}
}
faces-config.xml
<navigation-rule>
<navigation-case>
<from-action>#{loginTest.login}</from-action>
<if>#{loginTest.authenticated}</if>
<to-view-id>/faces/nextpage.xhtml</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
Wenn ich auf den Login-button generiert eine Ausnahme Argument Fehler: Parameter-id ist null
Stacktrace wird unten gegeben:
[2013-11-22T10:28:14.893+0000] [glassfish 4.0] [WARNING] [] [javax.enterprise.resource.webcontainer.jsf.lifecycle] [tid: _ThreadID=20 _ThreadName=http-listener-1(3)] [timeMillis: 1385116094893] [levelValue: 900] [[
Argument Error: Parameter id is null
java.lang.NullPointerException: Argument Error: Parameter id is null
at com.sun.faces.util.Util.notNull(Util.java:425)
at com.sun.faces.flow.FlowHandlerImpl.getFlow(FlowHandlerImpl.java:89)
.....
.....
at java.lang.Thread.run(Thread.java:724)
]]
[2013-11-22T10:28:14.909+0000] [glassfish 4.0] [FATAL] [jsf.context.exception.handler.log] [javax.enterprise.resource.webcontainer.jsf.context] [tid: _ThreadID=20 _ThreadName=http-listener-1(3)] [timeMillis: 1385116094909] [levelValue: 1100] [[
JSF1073: javax.faces.FacesException caught during processing of INVOKE_APPLICATION 5 : UIComponent-ClientId=, Message=Argument Error: Parameter id is null]]
[2013-11-22T10:28:14.909+0000] [glassfish 4.0] [FATAL] [] [javax.enterprise.resource.webcontainer.jsf.context] [tid: _ThreadID=20 _ThreadName=http-listener-1(3)] [timeMillis: 1385116094909] [levelValue: 1100] [[
Argument Error: Parameter id is null
javax.faces.FacesException: Argument Error: Parameter id is null
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:89)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
..........
at java.lang.Thread.run(Thread.java:724)
Caused by: java.lang.NullPointerException: Argument Error: Parameter id is null
at com.sun.faces.util.Util.notNull(Util.java:425)
at com.sun.faces.flow.FlowHandlerImpl.getFlow(FlowHandlerImpl.java:89)
at com.sun.faces.application.NavigationHandlerImpl.determineViewFromActionOutcome(NavigationHandlerImpl.java:1204)
....
]]
Bin ich etwas fehlt?
Außerdem, wenn ich den EL-Ausdruck in meine JSF Seite zu #{loginTest.login()} (d.h. Anhängen, Klammer), ich bekomme keine Fehlermeldung, aber die Weiterleitung funktioniert nicht. Macht das einen Unterschied?
InformationsquelleAutor A J Qarshi | 2013-11-22
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich es kopiert. Es ist ein Fehler in Mojarra, das hat die gleichen Gründe wie Problem 3054 die ich bereits früher berichtet. Wenn es keine Strömung Dokument-ID in der navigation Fall, die
NavigationCase#getToFlowDocumentId()
gibt eine leere Zeichenfolge zurück, nienull
noch den code ausführen, nur eine null-check.Gemeldet ich hab diesen bug als Problem 3087. Das Update wird hoffentlich in 2.2.5. In der Zwischenzeit, Ihre beste Wette ist, zu vergessen navigation Fälle und implizite navigation. Bearbeiten Sie die login-Methode wie folgt:
Loswerden, dass die navigation Fall.
<from-action>
die im Vergleich als Zeichenkette. Als Sie zurückvoid
aus action-Methode, und keine navigation Fall abgestimmt, standardmäßig die gleiche Ansicht zurückgegeben wird. Wenn Sie Bearbeiten die<from-action>
die Klammern, dann werden Sie sehen, dass es "funktioniert" (es werden immer noch Fehler mit der NPE, aber es ist zumindest gefunden 🙂 ).