ここで、特定の機能を実装する複合コンポーネントを構築する必要があります。レイアウト ページは次のようになります。
レイアウト.xhtml
<p:layout >
<p:layoutUnit position="center" style="border:0px;">
<ui:insert name="content"></ui:insert>
</p:layoutUnit>
</p:layout>
<ui:insert name="dialogContent"></ui:insert>
content.xhtml
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:p="http://primefaces.org/ui"
xmlns:hs="http://java.sun.com/jsf/composite/components" xmlns:f="http://java.sun.com/jsf/core" template="/layout/layout.xhtml">
<ui:define name="content">
<p:layout>
<h:form id="bodyForm" style="margin:0px">
<p:layoutUnit position="west">
<p:panel>
<hs:dlg></hs:dlg>
</p:panel>
</p:layoutUnit>
...
</h:form>
</p:layout>
</ui:define>
</ui:composition>
dlg.xhtml(複合コンポーネント)
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:composite="http://java.sun.com/jsf/composite" xmlns:p="http://primefaces.org/ui" xmlns:ui="http://java.sun.com/jsf/facelets">
<composite:interface>
...
</composite:interface>
<composite:implementation>
<p:inputText id="inputId" onclick="dlgVar.show();" />
<ui:define name="dialogContent">
<h:form id="dlgForm" prependId="">
<p:dialog widgetVar="dlgVar">
...
</p:dialog>
</h:form>
</ui:define>
</composite:implementation>
</ui:composition>
入力をクリックすると、ダイアログが開くことを願っています。残念ながら、うまくいきません。ダイアログを追加appendToBody="true"
して削除しようとしましたが、ダイアログ<ui:define name="dialogContent">
を開くことはできますが、ページに独立dlgForm
したものがないため、フォームデータを送信するときに問題が発生します。
では、layout.xhtml の適切な場所にダイアログをレンダリングするにはどうすればよいでしょうか?