gpt4 book ai didi

java - 使用 JSF2.0 和 Primefaces 3.4 进行导航

转载 作者:行者123 更新时间:2023-12-01 04:54:50 25 4
gpt4 key购买 nike

我是 JSF 和 Primefaces 的新手,刚刚开始进行登录和基本导航工作,但我已经遇到了问题。我在这里遇到了大约 10 个类似的问题,但没有一个解决方案对我有用,所以我想我应该发布我的具体问题,以便真正了解问题的人可以为我指出正确的方向。

  1. 登录:似乎和注销一样工作得很好,但我很担心,因为浏览器中的网址仍然显示我在登录后处于登录屏幕,并且我直接使用了登录示例Oracle EE6 文档。下面提供登录方法。

    public String login(){
    FacesContext context = FacesContext.getCurrentInstance();
    HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest();
    try{
    logger.log(Level.FINE, "User credentials: name: {0}, password: {1}", new Object[] {this.username, this.password});
    request.login(this.username, encrypt(this.password));
    logger.log(Level.FINE, "User: {0} logged in", this.username);
    }catch(ServletException e){
    logger.log(Level.SEVERE, "User: {0} login failed, password: {1}", new Object[]{this.username, encrypt(this.password)});
    context.addMessage(null, new FacesMessage("Login Failed!"));
    return "error";
    }
    return "/faces/system/index";

    }

  2. 登录后,我将进入正确目录中的正确页面,并且所有内容都会正确显示,但是当您将鼠标悬停在链接上时,浏览器底部的状态栏会显示所有三个链接的相同网址链接。下面提供的页面代码。

        <h:body>
    <p:layout fullPage="true">
    <f:facet name="last">
    <h:outputStylesheet library="css" name="discovery.css"></h:outputStylesheet>
    </f:facet>
    <p:layoutUnit styleClass="headerDiv" position="north" size="100">
    <h:graphicImage library="images" name="header.jpg"></h:graphicImage>
    </p:layoutUnit>
    <p:layoutUnit styleClass="navDiv" position="west" size="200" id="navPanel">
    <h:form>
    <h:outputText value="Navigation Menu"></h:outputText>
    <br/>
    <p:commandLink value="First Time Users" update=":main">
    <f:setPropertyActionListener target="#{navigationBean.pageToDisplay}" value="tutorial.xhtml"></f:setPropertyActionListener>
    </p:commandLink>
    <br/>
    <p:commandLink value="Help" update=":main">
    <f:setPropertyActionListener target="#{navigationBean.pageToDisplay}" value="help.xhtml"></f:setPropertyActionListener>
    </p:commandLink>
    <br/>
    <h:commandLink action="#{loginBean.logout()}" value="Log Out"></h:commandLink>
    </h:form>
    </p:layoutUnit>
    <p:layoutUnit position="center" id="main">
    <ui:include src="#{navigationBean.pageToDisplay}"></ui:include>
    </p:layoutUnit>
    </p:layout>
    </h:body>
  3. NavigationBean

    @Named(值 = "navigationBean")@RequestScoped公共(public)类 NavigationBean 实现可序列化 {

    公共(public)导航Bean() { }

    公共(public)字符串 getPageToDisplay() { 返回页面显示; }

    公共(public)无效setPageToDisplay(字符串pageToDisplay){ this.pageToDisplay = pageToDisplay; }

    私有(private)字符串pageToDisplay =“welcome.xhtml”;}

登录后加载页面时,会显示导航 bean 中设置的默认页面,但单击注销链接以外的任何链接都会导致默认页面从中心布局单元中消失,并显示空白页面/单击不过,在注销链接上确实会按预期将您注销。任何帮助将不胜感激。

最佳答案

1. Logging in: seems to work just fine as does logging out but I'm concerned because the url in the browser still says that I'm at the login screen after logging in.

发送重定向(这指示浏览器在给定 URL 上发送新的 GET 请求,该请求会反射(reflect)在浏览器的地址栏中)。

return "/faces/system/index?faces-redirect=true";
<小时/>

2. After logging in I'm taken to the correct page in the correct directory and everything is being displayed corectly but when you hover over the links the status bar at the bottom of the browser displays the same url for all three links.

<h:form>确实提交到同一页面。使用<h:outputLink><h:link>而不是<h:commandLink>用于页面到页面的导航。另请参阅When should I use h:outputLink instead of h:commandLink?

<小时/>

3. When the page loads after logging in the default page set in the navigation bean is displayed but clicking on any link other than the log out link causes the default page to disappear from the center layout unit and a blank page is displayed

这是通过使用 GET 而不是 ajax 回发进行页面到页面导航来解决的。因此,在解决#2 时,它就本质上得到了解决。您可能只想重新设计您的 NavigationBean是一个过滤器或阶段监听器,它也拦截 GET 请求。您根本不应该通过 POST 进行导航。它破坏了可 Collection 性、用户体验和 SEO,正如您现在遇到的那样。

关于java - 使用 JSF2.0 和 Primefaces 3.4 进行导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14363320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com