现在我必须构建一个复合组件来实现特定的功能。我们的布局页面如下所示:
布局.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>
内容.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 中的正确位置呈现对话框呢?