【问题标题】:p:dialog not showing upp:对话框不显示
【发布时间】:2013-02-11 10:07:10
【问题描述】:

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

内联可以显示数据表,但是当我单击按钮显示对话框时,什么也没有发生。我在日志中没有看到任何错误。

<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> 

navigationController.current 值会随着菜单点击的变化而变化,以在页面间导航。 我正在关注 primafaces 官方展示 PrimeFaces datatable

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

如果有人能指出正确的方向来解决这个问题,我会感激 :)

编辑:考虑到内联答案后,没有任何效果。 也许我应该先检查浏览器控制台,在这种情况下,这很奇怪,因为它抱怨它无法识别 widgedVar。 我已经尝试将对话框放在表单之外,结果是相同的错误。 :/

【问题讨论】:

  • 感谢您的提示,但不幸的是,那里发生的事情不适用于我的场景。我的表单是模板的一部分,在其中调用需要呈现的页面。这样我就可以在网站中导航并动态更新内容。我会尝试将页面设置为独立的,看看它是否有效。

标签: jsf primefaces


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我会改变两件事(首先可能不重要):

    1. 添加 2 个表单:一个包含数据表,另一个包含对话框
    2. 将 widgetVar="userDialog" 更改为独特的东西。 widgetVar="userDialogWidget"

    【讨论】:

    • 如果我这样做,我将拥有
      !从我从内部阅读的内容来看,这是一个坏主意。对吗?
    • 我不确定
      。您可以检查生成的源。更改 widgetVar 名称怎么样?
    • 刚刚更改为无效。将 widgetVar 更改为唯一值,并将 oncomplete 更新为指向 widgetVar。但什么都没有。
    • 如你所见@kolossus 给了你我所说的。将对话框带出表单。
    【解决方案3】:

    发现问题...

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

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

    第二。根据之前的答案,它必须在外面 here 解释。

    p:dialog 的大小不能包含 px。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多