在表单中创建弹出窗口

Create a popup inside a form

我想在表单中包含一个弹出窗口。通常的做法是使用 2 种形式,例如:

<div class="wrapper" >
 <h:form>
    <h:panelGroup id="id1" layout="block">
     <ui:include src= content1 />
    </h:panelGroup> 
 </h:form>
</div>

<h:form id="modalId">
 <ui:include src= popupContent >
 </ui:include>
</h:form>

并在 content1 中呈现一个按钮,即包含弹出窗口的表单 "modalId"。

我在 "content1" 中包含的外部组件中有弹出窗体。由于弹出窗体位于另一个窗体内,因此呈现效果不佳。我该如何解决?我的想法是使用我所有 xhtml 视图通用的组件

我编写自己的组件的方式是依赖于外部形式的存在。也就是说,我没有在组件中包含任何表单元素。 如果需要引用外部表单元素,那么我只需将 from id 作为接口的属性之一传递。复合组件对这类东西非常有用:

<composite:interface>
    <composite:attribute name="formId" type="java.lang.String" />
</composite:interface>
<composite:implementation>
    <h:commandButton value="button" action="someaction">
        <f:ajax execute="#{cc.attrs.formId}" render="#{cc.attrs.formId}" />
    </h:commandButton>
</composite:implementation>

然后将其包含在外部形式中(假设 'comp' 是复合组件的名称空间,'modal' 是包含该组件的文件的名称):

<h:form id="myForm">
   <comp:modal formId="myForm"/>
</h:form>

如果您不熟悉它们,请阅读本教程: http://docs.oracle.com/javaee/6/tutorial/doc/giqzr.html