2012-11-30 169 views
0

我正在測試PrimeFaces示例可用於http://www.primefaces.org/showcase/ui/dialogLogin.jsfPrimeFaces登錄嘗試(示例)失敗

HTTP Status 500 - 

type Exception report 

message 

description The server encountered an internal error() that prevented it from fulfilling this request. 

exception 

javax.servlet.ServletException: javax.el.MethodNotFoundException: Method not found: [email protected]() 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:229) 
root cause 

org.apache.myfaces.view.facelets.el.ContextAwareMethodNotFoundException: javax.el.MethodNotFoundException: Method not found: [email protected]() 
    org.apache.myfaces.view.facelets.el.ContextAwareTagMethodExpression.invoke(ContextAwareTagMethodExpression.java:104) 
    javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:88) 
    javax.faces.event.ActionEvent.processListener(ActionEvent.java:51) 
    javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:418) 
    javax.faces.component.UICommand.broadcast(UICommand.java:103) 
    javax.faces.component.UIViewRoot._broadcastAll(UIViewRoot.java:1028) 
    javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:286) 
    javax.faces.component.UIViewRoot._process(UIViewRoot.java:1375) 
    javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752) 
    org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:38) 
    org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:170) 
    org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117) 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:197) 
root cause 

javax.el.MethodNotFoundException: Method not found: [email protected]() 
    org.apache.el.util.ReflectionUtil.getMethod(ReflectionUtil.java:225) 
    org.apache.el.parser.AstValue.invoke(AstValue.java:253) 
    org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) 
    org.apache.myfaces.view.facelets.el.ContextAwareTagMethodExpression.invoke(ContextAwareTagMethodExpression.java:96) 
    javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:88) 
    javax.faces.event.ActionEvent.processListener(ActionEvent.java:51) 
    javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:418) 
    javax.faces.component.UICommand.broadcast(UICommand.java:103) 
    javax.faces.component.UIViewRoot._broadcastAll(UIViewRoot.java:1028) 
    javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:286) 
    javax.faces.component.UIViewRoot._process(UIViewRoot.java:1375) 
    javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752) 
    org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:38) 
    org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:170) 
    org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117) 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:197) 
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.21 logs. 

Apache Tomcat/7.0.21 

LoginBean.java是:

package classi; 
import java.awt.event.ActionEvent; 

import javax.faces.application.FacesMessage; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.SessionScoped; 
import javax.faces.context.FacesContext; 

import org.primefaces.context.RequestContext; 
@ManagedBean(name="loginBean") 
@SessionScoped 
public class LoginBean 
{ 
    private String username; 

    private String password; 

    public String getUsername() { 
     return username; 
    } 

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

    public String getPassword() { 
     return password; 
    } 

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

    public void login(ActionEvent actionEvent) { 
     RequestContext context = RequestContext.getCurrentInstance(); 
     FacesMessage msg = null; 
     boolean loggedIn = false; 

     if(username != null &&&& username.equals("admin") && password != null && password.equals("admin")) { 
      loggedIn = true; 
      msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Welcome", username); 
     } else { 
      loggedIn = false; 
      msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Login Error", "Invalid credentials"); 
     } 

     FacesContext.getCurrentInstance().addMessage(null, msg); 
     context.addCallbackParam("loggedIn", loggedIn); 
    } 
} 

我正確導入在Eclipse Dyamic web項目PrimeFaces和JSF 2.1,但是填寫表格時,我嘗試做登錄我收到以下錯誤後login.xhtml是:

<?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://java.sun.com/jsf/html" 
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:p="http://primefaces.org/ui"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>Insert title here</title> 
</head> 
<body> 
<h:outputLink id="loginLink" value="javascript:void(0)" onclick="dlg.show()" title="login">  
    <p:graphicImage value="/images/login.png" /> 
</h:outputLink> 

<p:growl id="growl" showDetail="true" life="3000" /> 

<p:dialog id="dialog" header="Login" widgetVar="dlg"> 
    <h:form> 

     <h:panelGrid columns="2" cellpadding="5"> 
      <h:outputLabel for="username" value="Username:" /> 
      <p:inputText value="#{loginBean.username}" 
        id="username" required="true" label="username" /> 

      <h:outputLabel for="password" value="Password:" /> 
      <h:inputSecret value="#{loginBean.password}" 
        id="password" required="true" label="password" /> 

      <f:facet name="footer"> 
       <p:commandButton id="loginButton" value="Login" update=":growl" 
        actionListener="#{loginBean.login}" 
        oncomplete="handleLoginRequest(xhr, status, args)"/> 
      </f:facet> 

     </h:panelGrid> 

    </h:form> 
</p:dialog> 

<script type="text/javascript"> 
    function handleLoginRequest(xhr, status, args) { 
     if(args.validationFailed || !args.loggedIn) { 
      jQuery('#dialog').effect("shake", { times:3 }, 100); 
     } else { 
      dlg.hide(); 
      jQuery('#loginLink').fadeOut(); 
     } 
    } 
</script> 
</body> 
</html> 

回答

2

你有一個壞的進口替代:

import java.awt.event.ActionEvent; 

import javax.faces.event.ActionEvent; 

而且,是& & & &工作?也許你有一個特殊的編譯器,如果它不給你錯誤:)

if(username != null &&&& username.equals("admin") && password != null && password.equals("admin")) 
+0

我也注意到這一點,但我錯誤地認爲是正確的東西從primefaces網站未來:( –

+0

謝謝你,你的幫助是珍貴的,像這樣的錯誤是如此令人沮喪 –

+0

很高興我幫助,還注意到,當JSF沒有在一個bean中找到一個函數時,可能是因爲錯誤的參數類型,有時我們需要ActionEvent,有時候需要AjaxBehaviorEvent等。 –