JSF 中的导航

Posted

技术标签:

【中文标题】JSF 中的导航【英文标题】:Navigation in JSF 【发布时间】:2011-11-22 00:52:55 【问题描述】:

早上好!我是新手。我有一个简单的 JSF 应用程序。但它没有按预期工作。 这是我的 login.xhtml

<h:body>
    <h:outputText value="Please enter your login and password"/>
    <h:form id="loginForm">
        <h:panelGrid columns="2">       
                <h:outputText value="User name"/>                   
                <h:inputText value="#textBean.login" required="true"/>
                <h:outputText value="Password"/>
                <h:inputSecret value="#textBean.password" required="true"/>
                <h:commandButton value="Submit" action="#textBean.doLogin"/>
        </h:panelGrid> 
    </h:form>
</h:body>

这是我的error.xhtml:

<h:body>
    <h:outputText value="You have entered incorrect data"/>
    <h:form id="errorForm">    
                <h:commandLink value="Back to login page" action="#TextBean.backToLogin"/>
    </h:form>
</h:body>

这是我的 bean 类 TextBean.java:

公共类TextBean实现可序列化

private static final long serialVersionUID = 1L;

private String login;

private String password;

public String getLogin() 
    return login;


public void setLogin(String login) 
    this.login = login;


public String getPassword() 
    return password;


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


public String doLogin() 
    if ("admin".equals(login) && "mypass".equals(password)) 
        return "welcome";
     else 
        return "error";
    



public String backToLogin() 
        return "login";

为什么错误页面没有回到登录页面?当您单击链接“返回登录页面”时,我得到了异常。我究竟做错了什么? 这是我的例外:

        The server encountered an internal error () that prevented it from fulfilling this request.
javax.servlet.ServletException: javax.el.PropertyNotFoundException: /error.xhtml @14,80 action="#TextBean.doMyLogin": Target Unreachable, identifier 'TextBean' resolved to null
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:521)
javax.faces.el.EvaluationException: javax.el.PropertyNotFoundException: /error.xhtml @14,80 action="#TextBean.doMyLogin": Target Unreachable, identifier 'TextBean' resolved to null
    javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:95)
    com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    javax.faces.component.UICommand.broadcast(UICommand.java:315)
    javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:787)
    javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1252)
    com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:508)
javax.el.PropertyNotFoundException: /error.xhtml @14,80 action="#TextBean.doMyLogin": Target Unreachable, identifier 'TextBean' resolved to null
    com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:107)
        javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
    com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    javax.faces.component.UICommand.broadcast(UICommand.java:315)
    javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:787)
    javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1252)
    com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:508)

请帮帮我,亲爱的朋友们!任何帮助将不胜感激。

【问题讨论】:

抛开具体的问题,为什么不直接用&lt;h:message&gt;的形式显示错误信息呢?应尽量避免对 POST 请求进行前向导航。你可以在这篇文章中找到一些指针:balusc.blogspot.com/2011/09/communication-in-jsf-20.html @BalusC - 好文章:) 【参考方案1】:

您的 bean 的名称是 textBean 而不是 TextBean。这就是JSF无法解决的原因:identifier 'TextBean' resolved to null

【讨论】:

以上是关于JSF 中的导航的主要内容,如果未能解决你的问题,请参考以下文章

JSF 中的取消按钮导航

从 JSF2 中的操作导航时如何传递视图参数?

如何在 JSF 中的 rowSelect 事件上从主视图导航到详细视图

我可以在 JSF 导航规则中使用通配符 * 吗?

链接中的 URL 片段和 JSF 中的 ajax 重定向

JSF中的循环managebean检测错误