复合组件中使用的ui-define在primefaces上不起作用

时间:2012-09-14 04:17:40

标签: java jsf-2 primefaces composite-component

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

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中的正确位置渲染对话框?

0 个答案:

没有答案