我有:
一个名为“LoginBean”的托管 bean。
名为“login.xhtml”的 JSF 页面
在这个 jsf 页面中,我有一个登录表单。
在managebean 内部我有一个loginCheck 函数。
public void loginCheck(){
if(logincorrect){
//set user session
}else{
//set lockout count session ++
}
}
我想要在我的 jsf 页面中做的是,当锁定计数会话 == 2 时(意味着用户无法正确登录 2 次),我需要显示一个 recaptcha 标签。
<td>
<%
if(FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("numberOfLogins") == 2){
<p:captcha label="Captcha" requiredMessage="Oops, are you human?"/>
}
%>
显然,
小脚本(那些类似 PHP 的<% %>
东西)是 JSP 的一部分,它是已弃用 http://docs.oracle.com/javaee/6/tutorial/doc/giepx.html自 JSF 2.0 以来,有利于其后继者 Facelets (XHTML)。 Facelets 不支持任何替代方案小脚本不再了。使用小脚本在 JSP 中几乎在所有情况下都会导致设计糟糕且难以维护的代码库 https://stackoverflow.com/questions/3177733/how-to-avoid-java-code-in-jsp-files/3180202#3180202。忘记他们吧。 Java 代码属于完整的 Java 类。只需在控制器(一个 JSF 支持 bean 类)中准备模型(一些 Javabean 类)并使用 taglibs 和 EL(表达式语言,那些#{}
things)来访问视图中的模型。
您的具体用例,
<%
if(FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("numberOfLogins") == 2){
<p:captcha label="Captcha" requiredMessage="Oops, are you human?"/>
}
%>
可以在完整的 JSF/EL 中解决如下:
<p:captcha label="Captcha" requiredMessage="Oops, are you human?" rendered="#{numberOfLogins == 2}" />
That numberOfLogins
顺便说一句,可以更好地成为 JSF 的财产@SessionScoped @ManagedBean
比手动放置在会话映射中的某些属性更重要。
也可以看看:
-
我们的 JSF 维基页面 https://stackoverflow.com/tags/jsf/info- 还包含一些不错的 JSF 教程的链接
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)