猿问

p:commandbutton action在p:dialog中不起作用

p:commandbutton action在p:dialog中不起作用

我有ap:对话框,里面有一个面板。问题是“保存”按钮的操作方法不起作用。它甚至不调用该方法。我可以达到方法def。使用ctrl + lm,因此方法名称没有问题。

<h:body>
    <h:form id="createAppUserForm" prependId="false">
      ....      <p:dialog id="newRoleDialogId"
                  header="Add New Role"
                  resizable="true"
                  draggable="true"
                  widgetVar="newRoleDetailsDialog"  
                  appendToBody="true"
                  >
            <p:panel id="newRoleDialogPanel">
                <p:panelGrid id="newRoleDialogPanelGrid" columns="2" style="width: 100%" styleClass="panelGridWithoutBorder">
                    <h:outputText value="Role Name :"/>
                    <p:inputText value="#{createAppUserController.selectedRole.name}"/>
                    <h:outputText value="Role Desc :"/>
                    <p:inputText value="#{createAppUserController.selectedRole.description}"/>
                </p:panelGrid>
                <center>
                    <p:commandButton value="Save"
                                     update="roleListDataTable newRoleDialogPanelGrid growlCreateAppUser"
                                     oncomplete="if (!args.validationFailed) newRoleDetailsDialog.hide()"                                     
                                     action="#{createAppUserController.saveNewRole()}"/>
                    <p:commandButton value="Cancel"                                         
                                     immediate="true"
                                     onclick="newRoleDetailsDialog.hide()" />
                </center>
            </p:panel>
        </p:dialog>
       </h:form>
    </h:body>


慕慕森
浏览 586回答 3
3回答

桃花长相依

该对话框与a一起使用时appendToBody/appendTo="@Body"&nbsp;必须有自己的形式。<p:dialog> &nbsp;&nbsp;&nbsp;&nbsp;<h:form> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;&nbsp;&nbsp;</h:form></p:dialog>因为,当对话框生成HTML输出时,它会被JavaScript重新定位到HTML的末尾<body>,导致它不再以任何形式存在。生成的HTML DOM树最终看起来像这样(使用webbrowser的开发工具来查看它):<body> &nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;&nbsp;&nbsp;<form&nbsp;id="createAppUserForm"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;&nbsp;&nbsp;</form> &nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;&nbsp;&nbsp;<div&nbsp;id="newRoleDialogId"&nbsp;class="ui-dialog&nbsp;..."> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;&nbsp;&nbsp;</div></body>在appendToBody="true"这里起到了重要作用。身体的末端确保了通过JavaScript显示模态对话框的简单和最佳的跨浏览器兼容性。同样是真实的方式为p:overlayPanel用appendTo...但也要确保在“移动”之前p:dialog,没有嵌套h:form。所以防止<h:form> &nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;&nbsp;&nbsp;<p:dialog> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<h:form> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</h:form> &nbsp;&nbsp;&nbsp;&nbsp;</p:dialog> &nbsp;&nbsp;&nbsp;...</h:form>虽然它最终会像&nbsp;<body> &nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;&nbsp;&nbsp;<form&nbsp;id="createAppUserForm"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;&nbsp;&nbsp;</form> &nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;&nbsp;&nbsp;<div&nbsp;id="newRoleDialogId"&nbsp;class="ui-dialog&nbsp;..."> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<form> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</form> &nbsp;&nbsp;&nbsp;&nbsp;</div></body>它最初是无效的HTML也可以看看:如何在ap:对话框中显示p:dataTable中当前行的详细信息,并在保存后更新创建主 - 详细信息表和对话框,如何重用相同的对话框进行创建和编辑如何在JSF页面中使用<h:form>?单一形式?多种形式?嵌套表格?

梵蒂冈之花

appendToBody =“true”在这里发挥作用。此属性已从最新版本中删除。请寻找其他替代方案
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答