时间:2013-02-22 21:02:16

标签: jsf jsf-2 primefaces

我正在使用Primefaces 3.4.2和JSF 2.0

我在JSF页面的对话框弹出窗口中有以下内容。

<p:dialog header="Create New Request" style="font-weight:bold"
        widgetVar="newDialog" resizable="false" id="newDlg"
        showEffect="fade" hideEffect="fade" appendToBody="true"
        modal="true" position="center top" width="850" height="450">
        <p:panelGrid columns="2">
        <h:outputLabel value="Employee" for="employee" />
            <p:selectOneMenu id="employee" value="#{mymb.employee}" 
            converter="#{employeeConverter}">
         <f:selectItems value="#{mymb.employeeItems}" var="emp"
        itemLabel="#{emp.employeeName}" itemValue="#{emp.employeeNumber}"/>
       <p:ajax listener="#{mymb.loadDepartments}"  process="@this"/>
</p:selectOneMenu>

        </p:panelGrid>
        <p:separator />
            </p:dialog>

如果我使用appendToBody="true",则不会调用selectOneMenu Converter类,但如果我将其设为appendToBody="false",则调用Converter

这可能是什么原因? appendToBody="false"使我的弹出对话框无法使用,无法使用鼠标进行导航。

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

删除appendToBody并在对话框中放入<h:form/>(及其内容)。

appendToBody="false"的目的是确保您的对话框在HTML输出的正文中(因此在主<h:form/>内)呈现。

如果没有appendToBody="false",对话框可能最终被附加到<body/>中标记的末尾,因此,其中的任何内容都不会被执行。

在您的对话框中添加<h:form/>可确保即使它在<body/>之外结束,它仍然可以提交到服务器