Jsf p:对话框没有显示

Jsf p:对话框没有显示,jsf,primefaces,Jsf,Primefaces,我对显示弹出窗口的JSF/Primefaces有问题。 作为背景,我使用JSF模板生成我的页面: 内联用于显示datatable,但当我单击按钮显示对话框时,什么也没有发生。我在日志中没有看到任何错误 <h:body> <p:dataTable id="lstUsers" var="u" value="#{userController.userList}" selectionMode="single" selection="#{use

我对显示弹出窗口的JSF/Primefaces有问题。 作为背景,我使用JSF模板生成我的页面:

内联用于显示datatable,但当我单击按钮显示对话框时,什么也没有发生。我在日志中没有看到任何错误

<h:body>
    <p:dataTable id="lstUsers" var="u" value="#{userController.userList}" selectionMode="single" 
                 selection="#{userController.selectedUser}" rowKey="#{u.login}" paginator="true" rows="10">
        <p:column headerText="Username">
            <h:outputLabel value="#{u.login}"></h:outputLabel>
        </p:column>
        <p:column headerText="Role" rowspan="2">
            <h:outputLabel value="#{u.role}"></h:outputLabel>
        </p:column>
        <f:facet name="footer">
            <p:commandButton id="bttAdd" type="button" value="Add" update=":contentView:idPanelPop" oncomplete="userDialog.show()" ></p:commandButton>
            <p:commandButton id="bttEdit" value="Edit"></p:commandButton>
            <p:commandButton id="bttRemove" value="Remove"></p:commandButton>
        </f:facet>
    </p:dataTable>
    <p:dialog id='userDialog' header="User Details" widgetVar="userDialog" 
              resizable="false" width="200px" height="200px" showEffect="clip" hideEffect="fold">
        <h:panelGrid  id="idPanelPop" columns="2">
            <h:outputLabel id='dOutUser' value="Username"></h:outputLabel>
            <h:outputLabel id='dOutUserValue' value="#{userController.selectedUser.login}"></h:outputLabel>

            <h:outputLabel id='dOutRole' value="Role"></h:outputLabel>
            <h:outputLabel id='dOutRoleValue' value="#{userController.selectedUser.role}"></h:outputLabel>
        </h:panelGrid>
    </p:dialog>
</h:body>

上述代码用作

<ui:composition template="./maintemplate.xhtml"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:p="http://primefaces.org/ui"
                xmlns:ui="http://java.sun.com/jsf/facelets">
    <ui:define id="contentViewIndex" name="content">
        <ui:include src="#{navigationController.currentPage}"></ui:include>
    </ui:define>
</ui:composition>

“我的模板”页面包含以下内容:

        <p:layoutUnit position="center">
                <h:form id="contentView">
                    <ui:insert name="content">
                            Default Content
                    </ui:insert>
                </h:form>    
        </p:layoutUnit> 

默认内容
导航控制器.current值会随着菜单单击在页面间导航而更改。 我正在关注官方的primafaces展览

我想当前的设置是Netbeans 7.3 RC1/Apache 7.0.34.0/Mojarra 2.1.13

如果有人能给我指出解决这个问题的正确方向,我会通知你:)

编辑:在考虑答案后,什么都不起作用。 也许我应该先检查一下浏览器控制台,在这种情况下,这很奇怪,因为它抱怨说它不认识widgedVar。
我已经尝试将对话框放置在表单外,结果是相同的错误:/

您的
bttAdd
按钮是普通按钮(您使用
type=“button”
属性显式设置它)。这意味着它只需要执行一些JavaScript,而不需要任何AJAX请求。要执行AJAX请求并更新面板,请删除
type=“button”
,然后重试。

我将更改两件事(首先可能不重要):

  • 添加两个表单:一个在数据表中,另一个在对话框中
  • 将widgetVar=“userDialog”更改为唯一的内容。widgetVar=“userDialogWidget”
  • 发现问题

    经过大量的测试和挖掘,并考虑到前面的答案。问题在于两件事:

    第一。对角线的高度和宽度不能包含px

    第二。根据之前的回答,它必须是外部的 解释道


    p:对话框中的px不能为大小。

    如果我这样做,我将拥有!从我所读到的内部形式是一个坏主意。对吧?我不确定。您可以检查生成的源代码。更改widgetVar名称如何?只是更改为无效。将widgetVar更改为唯一值,并将oncomplete更新为指向widgetVar。但是什么都没有,正如你所看到的,科洛索斯给了你我所说的。将对话框带到表单外部。可能重复:谢谢提示,但不幸的是,那里发生的事情不适用于我的场景。我的表单是模板的一部分,它在模板中调用需要呈现的页面。这样我就可以在站点中导航并动态更新内容。我将尝试将页面作为独立页面,看看它是否工作。