7

Primefaces 3 ダイアログの構成について混乱しています。

このパターンを持つSOの質問が表示されます。フォームはダイアログの外にあります。

<h:form>
  <p:dialog id="dialog" modal="true" widgetVar="dlg">
  </p:dialog>
</h:form>

しかし、他の質問にはこれがあります。

<p:dialog id="dialog" modal="true" widgetVar="dlg">
    <h:form>      
    </h:form>
</p:dialog>

Primefaces ショーケースhttp://www.primefaces.org/showcase/ui/dialogLogin.jsfは後者を支持しています。

どちらか一方を使用する正当な理由がある場合、私は混乱していますか?

ありがとう

4

1 に答える 1

15

あなたは常にこのように<h:form>内部を使用する方が良いです<p:dialog

<p:dialog id="dialog" modal="true" widgetVar="dlg">
    <h:form>      
    </h:form>
</p:dialog>

ダイアログのコンテンツがページから「取り出され」、DOMツリーの他の場所に追加される可能性があるため、ダイアログを何らかのフォーム内に配置すると、ダイアログが別の場所に移動し、すべてのボタン/リンクやその他の要素が機能しなくなる (これはここ SO で非常によくある質問です)

したがって、安全な側にいるために、<h:form>タグ内に<p:dialogタグを付けます

appendToBody="true"もう 1 つの例は、 in dialogを使用する場合です。

ダイアログが h:form コンポーネント内にあり、appendToBody が有効になっている場合、ブラウザーのダイアログはフォームの外側になり、予期しない結果を引き起こす可能性があります。この場合、フォームをダイアログ内にネストします。

于 2012-05-14T08:19:36.343 に答える