我如何在jsf页面中嵌入java代码?

我有:一个名为“LoginBean”的托管bean。 一个名为“login.xhtml”的JSF页面

在这个jsf页面中,我有一个登录表单。

在managebean内部,我有一个loginCheck函数。

public void loginCheck(){ if(logincorrect){ //set user session }else{ //set lockout count session ++ } } 

我想在jsf页面中做的是当锁定计数会话== 2时(意味着用户无法正确登录2次,我需要显示一个重回标签)。

  <% if(FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("numberOfLogins") == 2){ 

} %>

显然,<%标签不起作用。 感谢java / jsf专家提供的任何帮助。

Scriptlets (类似于PHP的<% %>事物)是JSP的一部分,自JSF 2.0以来不赞成使用它inheritanceFacelets(XHTML)。 Facelets不再支持scriptlet的任何替代方案。 在JSP中使用scriptlet几乎在所有情况下都会导致设计糟糕且代码库难以维护 。 忘了他们。 Java代码属于完全可用的Java类。 只需在控制器(JSF支持bean类)中准备模型(一些Javabean类),并使用taglibs和EL(表达式语言,那些#{}事物)来访问视图中的模型。

你的具体用例,

 <% if(FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("numberOfLogins") == 2){  } %> 

可以在满满的JSF / EL中解决如下:

  

顺便说一句, numberOfLogins可以更好地成为JSF @SessionScoped @ManagedBean属性,而不是手动放置在会话映射中的某个属性。

也可以看看:

  • 我们的JSF wiki页面 – 包含一些指向JSF教程的链接

这不是JSF的工作方式,至少不是XHTML作为表示层而不是JSP。 ( <%是JSP的一部分,你不再在这里使用了。)正确的方法是使用托管bean。 或者,您可以在此处使用表达式语言(EL)。

我将回顾Oracle Java EE教程的“JavaServer Faces技术”一章,以获得一些额外的帮助。