個人的には、オプション#2を使用します。ELを使用して問題を解決し、関数またはui:paramsを使用してxhtmlドキュメント全体で少し再利用することは非常に可能であることはわかっていますが、Java Bean実装の移植性、保守性、およびテスト性に欠けているようです。
開発者がELとJavaの両方に堪能で、xhtmlとJava Beanの両方を所有している場合、ELを使用してサイズが1より大きい条件付き評価を行うことはあまり意味がないようです。
Java側に実装するメリットは多すぎるようです。
- IDE +コンパイラに頼る能力
- 定数または列挙型(「dog」と「bark」の場合)を使用します。比較のためにコードの他の場所でも使用されている可能性があります...文字列の値が変更された場合、発生したすべての出現箇所を手動で置き換える必要があります。コードベース
- 適切なデータを使用して問題のページに移動する代わりに、単体テストを使用してロジックを実行できます
オプション1を支持して私が聞いた(Stack以外の)主な引数の1つは次のとおりです。
「このロジックをビューに保持しておくと、コンポーネントがいつレンダリングされるかがはるかにわかりやすくなります。」
これは、アプリケーションの軽量化と複雑さの軽減の初期段階のアプリケーションに当てはまる可能性があることがわかりました。ただし、この方法を大規模に適用し、小規模なアプリケーションが成熟すると、条件付きのネズミの巣が発生し、維持するのが悪夢になる可能性があります。以下は、私が実際に目にしたものに似た例です。
<h:outputText value="grrr"
render="#{animal.type == 'dog' or animal.type == 'cat' or animal.type == 'horse'
or animal.type == 'pony' or animal.type == 'mule' or animal.type == 'lion'
or animal.type == 'tiger' or (animal.type == 'bird'
and animal.subType == 'macaw') or .... continue this for another line or two}"
/>
または、私のお気に入り、互いに排他的なレンダリング条件を持つ複数のコンポーネントを使用して、表示される可能性のあるさまざまな値を表す:
<h:outputText value="grr" render="#{theMonstrosityFromPreviousExample} />
<h:outputText value="cry"
render="#{animal.type == 'human' and animal.subType == 'baby'}" />
<h:outputText value="yo"
render="#{animal.type == 'human' and animal.subType == 'teenager'}" />
<h:outputText value="hello"
render="#{animal.type == 'human' and animal.subType == 'adult'}"/>
一度に最大4つのテキストを表示できますか?一見できませんが、各状態のチェックが必要になります。余談ですが、この例はデザインが貧弱であることに気づきました。これらはac:chooseに入れられる可能性があるからです...しかし、これは以前に見たことがあります。
結局のところ、これは実際には何が表示されるかを決定するため、理論的には「表示」ロジックであり、xhtmlに含める必要のある概念的な引数があります。私が見つけた問題は、ビューテンプレートにこのようなロジックを含めると、レイアウトを長期的に理解することがはるかに困難になる可能性があり、問題を解決するこの方法がJavaを使用するよりも実際の利点を持っていることをまだ見ていませんBeanの実装。
barking animals
、そのメソッドはすでに存在しているので、そのメソッドを呼び出します。複数のサイトで使用するビューロジックの場合、そこからel関数を作成できます。