我如何在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技术”一章,以获得一些额外的帮助。
- 如果存在,则关闭打开的hibernate会话
- Oracle:发送JMS消息的Java存储过程
- Java是否有现成的时钟同步解决方案?
- Python的urllib2.urlopen()挂起了与Java Restlet服务器的本地连接
- Eclipse如何实际运行Junit测试?
- Prime测试,2位数字
- Java Vector或ArrayList for Primitives
- 无法从java 8流中的静态上下文引用非静态方法
- 在jar中找不到带注释的自定义JSF2组件
Interesting Posts