1

JSF 1.1 ページを変更して、ページの一部を条件付きで非表示にしようとしています。このページは、生の HTML とタグを組み合わせて使用​​して構築されています。具体的には、次のものがあります。

<table>
  <tr>
    <td>Foo</td>
    <td><h:inputText ... /></td>
  </tr>
  <tr>
    <td>Bar</td>
    <td><h:inputText ... /></td>
  </tr>
  <!-- more stuff, including <h:dataTable>
</table>

このテーブル全体を条件付きで非表示にするタグでこれをラップしたいのですが、それを理解できないようです。これが私が試したことです:

  • マークアップを でラップし<h:panelGroup rendered="...">ます。これはマークアップを正しく表示/非表示にしますが、生の HTML はすべて、生成された HTML から取り除かれます。
  • マークアップを でラップし<f:verbatim>ます。verbatim タグには JSF 1.1 の render 属性がないため、これは機能しません。
  • 全体を<h:panelGroup rendered="..."><f:verbatim>コンボにまとめます。これは、最初の試行と同じ効果があります。
  • 私も試し<f:view>てみまし<f:subview>たが、役に立ちませんでした。

JSF ページに JSTL タグを含めて使用できることは知っています<c:if>が、この状況は避けたいと思います。何か案は?

注: HTML と JSF を混在させることは (少なくとも一部では) 悪い習慣だと考えられていることは承知していますが、このページは他の人によって作成されたものです。それからの小さなスニペット)..

4

1 に答える 1

1

<table>に置き換え<h:panelGrid>ます。

<h:panelGrid columns="2">
  <h:outputText value="Foo" />
  <h:inputText ... />

  <h:outputText value="Bar" />
  <h:inputText ... />

  <!-- more stuff, including <h:dataTable>
</h:panelGrid>

または、CSS display:none/block: を使用します。

<table style="display: ${some condition ? 'none' : 'block'};">

または、JSF 1.2 にアップグレードしてください。技術的には、JSF 1.1 Web アプリケーションは、コードを変更することなく簡単に JSF 1.2 にアップグレードできます。JAR を更新し、faces-config.xmlルート宣言を変更して、JSF 1.1 DTD を JSF 1.2 XSD に置き換えるだけです。JSF 1.2 には改善されたビュー ハンドラーが付属しており、この<f:verbatim>悪夢を解消します (つまり、ビュー ハンドラーは不要になりました)。また、非常に多くのバグ修正とパフォーマンスの向上が含まれており、非常に感謝しています。


具体的な問題とは関係ありませんが、HTML と JSF を混在させることは悪い習慣であるというあなたの声明に関しては、これは必ずしも真実ではありません。少なくとも JSF 1.2 以降ではありません。JSF 1.0/1.1 では、<f:verbatim>これを使用する必要があり、実際に開発/保守するのが面倒です。これにより、JSF と HTML の混合は「悪い」という間違った神話が生まれました。「 Java Server Faces 2.0 の主な欠点は何ですか?」も参照してください。その歴史について少し説明します。

于 2012-09-07T11:33:06.417 に答える