当前位置: 首页 > 知识库问答 >
问题:

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

郑承恩
2023-03-14

我不熟悉JSF和Primefaces,刚刚开始登录和基本导航,我已经遇到了一个问题。我已经在这里讨论了大约10个类似的问题,但没有一个解决方案对我有效,所以我想我会发布我的具体问题,以便真正了解的人可以为我指出正确的方向。

>

  • 登录:似乎和注销一样工作正常,但我很担心,因为浏览器中的url仍然显示登录后我在登录屏幕上,我直接使用了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";
    

    }

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

        <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>
    

    NavigationBean

    @命名的(value=“navigationBean”)@RequestScoped公共类navigationBean实现可序列化{

    公共NavigationBean(){}

    公共字符串getPageToDisplay(){返回pageToDisplay;}

    public void setPageToDisplay(字符串pageToDisplay){this.pageToDisplay=pageToDisplay;}

    私有字符串pageToDisplay="welcome.xhtml";}

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

  • 共有1个答案

    邹时铭
    2023-03-14

    1、登录:似乎和注销一样正常,但我很担心,因为浏览器中的url仍然显示登录后我在登录屏幕上。

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

    return "/faces/system/index?faces-redirect=true";
    

    登录后,我被带到正确目录中的正确页面,所有内容都被正确显示,但当您将鼠标悬停在链接上时,浏览器底部的状态栏会显示所有三个链接的相同url。

    <代码>

    3.当页面在登录后加载时,显示导航bean中设置的默认页面,但单击除注销链接以外的任何链接会导致默认页面从中心布局单元中消失,并显示空白页面

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

     类似资料:
    • 我遇到的一个问题是水平导航栏。我已经使用flexbox实现了它。 我有一个导航条,当我缩小它时,列表项(有黑色边框)不会停留在无序列表容器中(有紫色边框) 根据我对每个flex box的理解,应该使用flex属性在父容器中调整大小。但是在我的例子中,列表项不会在无序列表容器中调整大小。以下是正在发生的事情的图片: 这是我的html代码:

    • 我有3个项目的底部导航视图,我的如下所示: 底部导航视图中带有嵌套navGraph片段的导航工作正常,但是如果我导航到,它在嵌套navGraph之外,并且我单击其他项目/片段,我无法导航到其他片段,我基本上被困在这个屏幕上。 我检查了一下,如果我把

    • 我正在使用webpack将一些boostrap和其他css文件捆绑在一起,下面是webpack.config.js文件var htmlWebPack=require('html-webpack-plugin');var ExtractTextPlugin=require(“extract-text-webpack-plugin”); 我引用了main.ts文件中的引导文件夹,如下所示 但是当我运行

    • 我正在使用动作栏和带有片段的选项卡导航。 每个选项卡都包含一个带有列表视图的片段X,当单击列表中的一个项目时,片段X被另一个带有项目详细信息的片段取代。 当我在FragmentY中时,如何设置的Up按钮以加载FragmentX? 文档显示导航应该在之间完成,但的导航选项卡允许在之间导航,而不是。 我错过了什么?

    • 我正在使用DataTables,并将这个有点尴尬的Javascript拼凑在一起,以允许行和列高亮显示。它基于本页的示例(http://datatables.net/release-datatables/examples/api/highlight.html ). 下面是dataTable配置的相关部分: 服务器上的模板代码插入了一些常量。这是列数。以下是DataTables调试输出:http:/

    • 我正在使用和Spy对函数进行单元测试。 这是正在测试的类: 我正在尝试使用Mockito和spy进行测试,因为我不想调用真正的函数只需验证一下即可。该测试称为 这是错误: 我也尝试过这样做,它会导致空指针: