読者です 読者をやめる 読者になる 読者になる

Primefaces layout + modal dialog のメモ

何も気にせずに使ってたら、ダイアログ自体もブロックされて何も触れない状態になった!
java - Modal ConfirmDialog over modal Dialog -> everything is blocked - Stack Overflow
appendToBody="true" で回避出来るよと。
最新では、append="@(body)" に替わってます。

ここまでは良かったんですが、この対応をすると dialog 上の commandButton から actionListener が呼ばれなくなった!
http://forum.primefaces.org/viewtopic.php?f=3&t=34397
commandButton に process="@this" 付けたらOKでした。

これで OK かと思ったら、actionListener は呼ばれたけど、form の中身がサーバーに飛んでない!

xhtml を次のように書いたとして、

...
<h:form id="form">
 ...
 <p:dialog appendTo="@(body)">
  ...
 </p:dialog>
</h:form>
...

吐かれる html は、

<form ~>
...
</form>
 ...
<div>
 ... <!-- dialog の中身 -->
</div>

となっていて、dialog の中身が form タグ内に居なくなってました。
そりゃサーバーに飛ばない訳だ。

という訳で対応策としては、<p:dialog> の中に <h:form> を書くようにしましょう。

<p:dialog>
  <h:form>
    ...
  </h:form>
</p:dialog>

appendToBody 使うときは、dialog の中に form 書こうねと Primefaces user guid P-163 の Tips にちゃんと載ってました。

ちゃんとドキュメント読めということですね。