1

现在我必须构建一个复合组件来实现特定的功能。我们的布局页面如下所示:

布局.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 中的正确位置呈现对话框呢?

4

0 回答 0