为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕慕森 2019-08-05 15:54:23
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>
查看完整描述

3 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

该对话框与a一起使用时appendToBody/appendTo="@Body" 必须有自己的形式。

<p:dialog>
    <h:form>
        ...    </h:form></p:dialog>

因为,当对话框生成HTML输出时,它会被JavaScript重新定位到HTML的末尾<body>,导致它不再以任何形式存在。生成的HTML DOM树最终看起来像这样(使用webbrowser的开发工具来查看它):

<body>
    ...    <form id="createAppUserForm">
        ...    </form>
    ...    <div id="newRoleDialogId" class="ui-dialog ...">
        ...    </div></body>

appendToBody="true"这里起到了重要作用。身体的末端确保了通过JavaScript显示模态对话框的简单和最佳的跨浏览器兼容性。

同样是真实的方式为p:overlayPanelappendTo...

但也要确保在“移动”之前p:dialog,没有嵌套h:form。所以防止

<h:form>
   ...    <p:dialog>
        <h:form>
            ...        </h:form>
    </p:dialog>

   ...</h:form>

虽然它最终会像

 <body>
    ...    <form id="createAppUserForm">
        ...    </form>
    ...    <div id="newRoleDialogId" class="ui-dialog ...">
        <form>
           ...        </form>
    </div></body>

它最初是无效的HTML

也可以看看:


查看完整回答
反对 回复 2019-08-05
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

appendToBody =“true”在这里发挥作用。此属性已从最新版本中删除。请寻找其他替代方案


查看完整回答
反对 回复 2019-08-05
  • 3 回答
  • 0 关注
  • 585 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信