[java] Wie kann ich eine Benachrichtigung mit Willkommensnachricht anzeigen, wenn ich angemeldet bin?


Answers

Question

Ich möchte ein Primefacts-Tool namens Benachrichtigungsleiste verwenden, um eine Nachricht anzuzeigen, die Willkommen sagt, wenn der Benutzer sich anmeldet. Das Problem ist, dass ich nicht weiß, wie es ausgelöst wird, nur wenn die Anmeldung erfolgreich ist (wenn falsches Passwort nicht sollte angezeigt werden) und auch dann angezeigt werden, wenn ich auf eine andere Seite weitergeleitet werde.

So sieht meine Loggin-Seite aus:

<ui:composition template="WEB-INF/templates/BasicTemplate.xhtml">
    <!-- THE REGISTRATION FORM -->
    <ui:define name="loginForm">
       <h2>Login page</h2>
       <h:form>
       <p:panel>                
                    <h:outputText value="*Em@il:" />
                    <h:inputText id="email" value="#{securityController.email}" binding="#{emailComponent}"/>                   
                    <br/>
                    <h:outputText value="*Lozinka: " />
                    <h:inputSecret id="password" value="#{securityController.password}" validator="#{securityController.validate}">                     
                        <f:attribute name="emailComponent" value="#{emailComponent}" />
                    </h:inputSecret>            

                    <br/>
                    <span style="color: red;"><h:message for="password"
                    showDetail="true" /></span> 
                    <br/>
                    <h:commandButton value="Login" action="#{securityController.logIn()}" onclick="topBar.show()"/>                 

                </p:panel>
            </h:form>   

    </ui:define>

</ui:composition>

Dies ist die Methode der verwalteten Bean, die die Umleitung ausführt:

@ManagedBean
@RequestScoped
public class SecurityController {

    @EJB
    private IAuthentificationEJB authentificationEJB;       

    public String logIn() {     
        if (authentificationEJB.saveUserState(email, password)) {               
            return "main.xhtml";
        } else {
            return null;
        }
    }

Die Benachrichtigungsleiste befindet sich in einer Vorlage, die von allen Seiten verwendet wird (BasicTemplate.xhtml):

<f:view contentType="text/html">
    <h:head>
        ...
    </h:head>

    <h:body>
        ...     
        <p:notificationBar position="top" widgetVar="topBar" styleClass="top">
            <h:outputText value="Welcome, you are now logged in!"
                style="color:#FFCC00;font-size:36px;" />
        </p:notificationBar>
    </h:body>
</f:view>

Ich möchte, dass es nur einmal angezeigt wird, wenn der Benutzer korrekt angemeldet ist (wenn der Else-Block ausgeführt wird, sollte er nicht angezeigt werden).

Wie kann ich das erreichen?

Aktualisieren

hat die logIn () Methode geändert:

public String logIn() {
        if (authentificationEJB.saveUserState(email, password)) {
            // Pass a parameter in ussing the URL.(The notification bar will
            // read this parameter)
            return "main.xhtml?faces-redirect=true&login=1";
        } else {
            return null;
        }
    }

Hinzugefügt unter main.xhtml

 <ui:composition template="WEB-INF/templates/BasicTemplate.xhtml">
    <ui:define name="mainForm">      
        <h2>The main page</h2>
        <script type="text/javascript">
          jQuery(function() {
          topBar.show()
           });
         </script>          
        <p:notificationBar id="notbar" position="top" widgetVar="topBar" styleClass="top" rendered="#{param.login == 1}">
            <h:outputText value="Welcome, you are now logged in!"
                style="color:#FFCC00;font-size:36px;" />
        </p:notificationBar>

    </ui:define>

</ui:composition>



Links