我想使用稱爲Notification bar的primefaces工具在用戶登錄時顯示歡迎消息。問題是我不知道如何才能觸發它,只有當登錄成功時(如果密碼錯誤不應該被顯示)並且即使我被重定向到另一個頁面也被顯示。如何在登錄時顯示歡迎信息通知?
這是我的洛頁面看起來像:
<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="*[email protected]:" />
<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>
這是管理的bean,做重定向的方法:
@ManagedBean
@RequestScoped
public class SecurityController {
@EJB
private IAuthentificationEJB authentificationEJB;
public String logIn() {
if (authentificationEJB.saveUserState(email, password)) {
return "main.xhtml";
} else {
return null;
}
}
通知欄位於模板所有頁面使用(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>
我希望它只出現一次用戶獲取正確登錄(如果執行else塊,應該不會出現)。
我該如何做到這一點?
更新
改變了login()方法:
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;
}
}
添加了這個在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>
如果您想在main.xhtml中顯示通知欄,我很困惑@sfrj爲什麼在登錄頁面中顯示
? – Bastardo 2011-04-20 12:24:41是的你是對的。我只是改變了這一點(查看更新後的問題)。通知欄當前位於所有頁面正在使用的模板中。如果登錄按鈕是正確的,我如何從登錄按鈕觸發它? – sfrj 2011-04-20 12:32:09
我認爲問題是在加載main.xhtml時觸發欄。由於OP使用JSF模板沒有'H:body'在頁面上添加一個'的onLoad =「topBar.show()」' – 2011-04-20 12:32:18