1. ホーム
  2. jsf

[解決済み] JSFのコンポーネントを条件付きで表示する

2023-07-27 18:09:51

質問

最初に、私は ASP .NET 開発の強力なバックグラウンドから来た、Java EE の初心者です。 私はネットを通過し、私はこれを見逃すかもしれませんが、私がJSFコンポーネントにバッキングBeanクラスを接続できる方法について、シンプルでわかりやすいチュートリアルがないように思われます。

良い例はこのようなものです。現在、私はメニューバーとフォームのセットとして一連のリンクがあるJSFページを作成しようとしています。私が計画しているのは、リンクをクリックすると、特定のフォームがレンダリングされることです。

ASP.NETでは、私は簡単に要素を取得し、表示可能な属性を設定することができました。私は、JSFでこれを行う簡単な方法(とんでもない、どんな方法でも)があるのか疑問に思っています。

フォームはすでにページ内にあり、特定のリンクをクリックしたときに "render" 属性を true に設定することだけが問題なのです。

どのように解決するのですか?

そうです。 rendered 属性を使用します。

<h:form rendered="#{some boolean condition}">

モデルがコンポーネントを掴んで操作するのではなく、通常はモデルに結びつけます。

<h:form rendered="#{bean.booleanValue}" />
<h:form rendered="#{bean.intValue gt 10}" />
<h:form rendered="#{bean.objectValue eq null}" />
<h:form rendered="#{bean.stringValue ne 'someValue'}" />
<h:form rendered="#{not empty bean.collectionValue}" />
<h:form rendered="#{not bean.booleanValue and bean.intValue ne 0}" />
<h:form rendered="#{bean.enumValue eq 'ONE' or bean.enumValue eq 'TWO'}" />

の重要性に注意してください。 キーワードに基づくEL演算子 のような gt , ge , lelt の代わりに > , >= , <=< を角括弧として < であり > はXMLで予約されている文字です。こちらの関連Q&Aもご覧ください。 XHTMLのパースでエラーが発生します。要素の内容は、整形された文字データまたはマークアップで構成されなければならない .

具体的な使用例として、リンクが以下のようなパラメータを渡していると仮定してみましょう。

<a href="page.xhtml?form=1">link</a>

すると、以下のようにフォームを表示することができます。

<h:form rendered="#{param.form eq '1'}">

(その #{param} を参照する暗黙のELオブジェクトです。 Map を参照する暗黙のELオブジェクトです(リクエスト・パラメータを表しています)。

も参照してください。