【问题标题】:How do i embed java code inside jsf page?我如何在 jsf 页面中嵌入 java 代码?
【发布时间】:2012-09-02 02:16:11
【问题描述】:

我有: 一个名为“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?"/>
       }
     %>

显然,

【问题讨论】:

  • 另一个可怕的想法。 JSP 中的 Scriptlet 代码是 1998 年的古董。你不应该这样做。学习 JSTL,不要把 scriptlet 放在你的页面中。
  • 我们要评判谁?我认为这是事实基础?为什么这些问题必须如此真实,而答案和问题却是固执己见?大声笑。

标签: java jsf jsf-2 scriptlet


【解决方案1】:

Scriptlets(那些类似于 PHP 的 &lt;% %&gt; 东西)是 JSP 的一部分,自 JSF 2.0 以来它就是 deprecated,以支持其继任者 Facelets (XHTML)。 Facelets 不再支持 scriptlets 的任何替代方案。在 JSP 中使用 scriptlets 几乎在所有情况下都会导致 badly designed and poorly maintainable codebase。忘记他们。 Java 代码属于完全有价值的 Java 类。只需在控制器(JSF 支持 bean 类)中准备模型(一些 Javabean 类)并使用标记库和 EL(表达式语言,那些#{} 的东西)来访问视图中的模型。

您的具体用例,

<%
     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}" />

顺便说一句,numberOfLogins 可以作为 JSF @SessionScoped @ManagedBean 的属性比手动放置在会话映射中的某些属性要好得多。

另见:

【讨论】:

  • 我们可以在 jsf 1 中使用 scriptlet 吗?
  • Scriptlets 不是 JSF 特有的。它们特定于 JSP 视图技术。因此,如果您使用 JSP,那么您可以使用 scriptlets。但是,它们被认为是不好的做法,官方不鼓励这样做。另见stackoverflow.com/questions/3177733/…
【解决方案2】:

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

我会查看"JavaServer Faces Technology" chapter of Oracle's Java EE tutorial 以获得更多帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-21
    • 2012-09-09
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 2017-03-14
    相关资源
    最近更新 更多