单击菜单后,PrimeFaces布局需要手动刷新

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单击菜单后,PrimeFaces布局需要手动刷新相关的知识,希望对你有一定的参考价值。

在我的项目中,我想实现当有人访问时,需要首先弹出一个登录对话框(隐藏主页面菜单和其他元素..让你看到登录框)。然后如果你输入正确的信息,隐藏登录框和显示布局到你。 现在的问题是:当隐藏框时,是的,您可以看到布局并且看起来不错,但是当您单击菜单中的链接时,中心的所有布局都显示为无。但是当您再次刷新浏览器时,您可以再次看到它

我确定我是否更新了错误的ID或其他内容。以下是代码引用和捕获异常。等你的回答。对我来说非常重要。最诚挚的问候和谢谢。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.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:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">

<f:view contentType="text/html">
    <h:head>
        <f:facet name="first">
            <meta http-equiv="X-UA-Compatible" content="EmulateIE8" />
            <meta content='text/html; charset=UTF-8' http-equiv="Content-Type" />
            <title>SingTel - eshop Operation Maintaince</title>
            <link rel="shortcut icon"
                href="#{request.contextPath}/images/system/favicon.ico" />

        </f:facet>

        <link type="text/css" rel="stylesheet"
            href="#{request.contextPath}/css/default.css" />
        <link type="text/css" rel="stylesheet"
            href="#{request.contextPath}/css/syntaxhighlighter/syntaxhighlighter.css" />

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

    <h:body>    
        <p:outputPanel id="mainPanel" autoUpdate="true">
            <p:layout fullPage="true" id="layout" rendered="#{esUserSessionBean.showLogin == true ? false : true}">
                <p:layoutUnit id="left" position="west" closable="false"
                    collapsible="true" style="border:0px" header="MENU">
                    <h:form id="menuForm">
                        <p:slideMenu
                            style="width:272px;height:600px;margin-left:-3px;margin-top:-6px;"
                            id="tree">
                            <p:submenu label="Test EJB " icon="ui-icon-play">
                                <p:menuitem value="Test EJB " action="#{navigationBean.doNav}"
                                    update=":centerContentPanel" icon="ui-icon-arrow-4-diag">
                                    <f:param name="urlParam" value="ui/testEJB/testEJB" />
                                </p:menuitem>
                            </p:submenu>
                        </p:slideMenu>
                    </h:form>
                </p:layoutUnit>
                <p:layoutUnit id="center" position="center" style="border:0px;">
                    <p:outputPanel id="centerContentPanel">
                        <ui:include src="../#{navigationBean.pageName}.xhtml" />
                    </p:outputPanel>
                </p:layoutUnit>
            </p:layout>
        </p:outputPanel>

        <p:outputPanel id="loginPanel" autoUpdate="true">
            <p:dialog id="dialog" header="Login" widgetVar="dlg" closable="false"
                visible="#{esUserSessionBean.showLogin}"
                modal="true"
                >
                <h:form id="loginForm">
                    <h:panelGrid columns="2" cellpadding="5">
                        <h:outputLabel for="username" value="Username:" />
                        <p:inputText id="username" value="#{esUserSessionBean.userId}"
                            required="true" label="username" />
                        <h:outputLabel for="password" value="Password:" />
                        <p:password id="password" value="#{esUserSessionBean.password}"
                            required="true" label="password" feedback="false" />

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

                        </f:facet>
                    </h:panelGrid>

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



    </h:body>

</f:view>
</html>
答案

你需要将你的#loginLink包装在<h:panelGroup rendered=#{not bean.isLogged}"></h:panelGroup>中。 bean.isLogged将是您选择的setter,如果用户已连接,则返回true。

这样,当您刷新页面时,将不会显示该链接。虽然,我没有在您的代码段中找到您的#loginLink。

以上是关于单击菜单后,PrimeFaces布局需要手动刷新的主要内容,如果未能解决你的问题,请参考以下文章

JSF Primefaces 在布局问题中使用菜单栏

PrimeFaces sideMenu在LayoutUnit中单击加载内容

PRIMEFACES - 如何通过单击 <p:commandButton> 刷新 <p:graphicImage>?

单击侧菜单项时如何避免刷新页面

单击后关闭悬停子菜单而不刷新页面

刷新后PrimeFaces fileUploader不可见