我有:被称为“LoginBean”托管bean。 所谓“login.xhtml” JSF页面
在此JSF页面中,我有一个登录表单。
里面的managebean我有一个loginCheck功能。
public void loginCheck(){
if(logincorrect){
//set user session
}else{
//set lockout count session ++
}
}
我想在我的JSF页面做的是,当锁定计数会议== 2(意味着用户无法正确登录2次,我需要一个验证码标签来显示。
<td>
<%
if(FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("numberOfLogins") == 2){
<p:captcha label="Captcha" requiredMessage="Oops, are you human?"/>
}
%>
显然,<%标签不起作用。 欣赏从Java / JSF专家的帮助。
小脚本 (那些PHP状<% %>
的东西)是其JSP的一部分弃用因为JSF 2.0有利于它的后继者的Facelets(XHTML)的。 Facelets的不支持任何替代小脚本了。 在JSP中使用小脚本在几乎所有情况下会导致严重的设计和维护的代码库很差 。 忘记他们。 Java代码所属fullworthy Java类。 只需要准备在控制器中的模型(一些JavaBean类)(一个JSF支撑类)和使用标记库和EL(表达式语言,那些#{}
的东西)来访问该视图中的模型。
您的具体使用情况,
<%
if(FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("numberOfLogins") == 2){
<p:captcha label="Captcha" requiredMessage="Oops, are you human?"/>
}
%>
可以在fullworthy JSF / EL来解决如下:
<p:captcha label="Captcha" requiredMessage="Oops, are you human?" rendered="#{numberOfLogins == 2}" />
这numberOfLogins
可以通过方式要好得多进行一个JSF的性能@SessionScoped @ManagedBean
比一些属性被手动放置在会话映射。
也可以看看:
- 我们的JSF wiki页面 -包含一些链接体面的JSF教程以及
这不是JSF是如何工作的,至少不会与XHTML表示层,而不是JSP。 ( <%
是JSP,你已不再使用这里的一部分。)这样做是托管bean的正确方法。 另外,您也可以使用表达式语言(EL)在这里。
我会检讨Oracle的Java EE教程“JavaServer Faces技术”一章对于一些额外的帮助。