4

私が持っているのは、「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?"/>
       }
     %>

どうやら、<%タグは機能しません。java/jsfの専門家からの助けに感謝します。

4

2 に答える 2

16

スクリプトレット(これらの PHP に似<% %>たもの) は JSP の一部であり、JSF 2.0 以降は推奨されておらず、その後継の Facelets (XHTML) が採用されています。Facelets は、スクリプトレットに代わるものをサポートしなくなりました。JSP でスクリプトレットを使用すると、ほとんどの場合、設計が不十分で保守しにくいコードベースになります。それらを忘れてください。Java コードは完全な Java クラスに属します。コントローラー (JSF バッキング Bean クラス) でモデル (Javabean クラス) を準備し、taglibs と 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}" />

ちなみに、セッションマップに手動で属性を配置するよりも、 JSFnumberOfLoginsのプロパティにする方がはるかに優れています。@SessionScoped @ManagedBean

以下も参照してください。

于 2012-09-08T13:52:23.100 に答える
9

これはJSFの動作方法ではありません。少なくとも、JSPの代わりにプレゼンテーション層としてXHTMLを使用する場合はそうではありません。(<%これはJSPの一部であり、ここでは使用していません。)これを行う適切な方法は、マネージドBeanを使用することです。または、ここで式言語(EL)を使用することもできます。

追加の支援が必要な場合は、OracleのJavaEEチュートリアルの「JavaServerFacesTechnology」の章を確認します。

于 2012-09-08T13:05:57.060 に答える