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