验证失败时<p:dialog>保持打开状态但更正提交不会调用操作</p:dialog>

时间:2014-06-22 18:52:37

标签: jsf-2 primefaces

由于以下密切相关的问题是一年半,我想我应该重新问这个问题。 Keep <p:dialog> open when validation has failed

我在<p:dialog&gt;中打开一个表单。如果表格输入和提交正确,一切正常。如果用户提交无效信息,表单将保持打开状态,并且验证消息将按预期显示。但是,用户现在更正表单并提交:对话框关闭(很好,表单上不再有任何错误),但不调用commandButton的action或actionListener方法。这是我的代码,它仔细遵循链接的问题。

<h:form>
    ...
    <h:commandButton value="Add Event..." onclick="addEventDlg.show()" type="button"/> 
</h:form>

<p:dialog id="dlg" header="Add Event" widgetVar="addEventDlg" modal="true">
    <h:form id="addEventForm">
        <h:messages  style="color:red;margin:8px;" />
        <table>
            <tr>
                <td style="vertical-align:center"><h:outputLabel for="eventType" value="Event Type: " /></td>
                <td>
                    <h:selectOneListbox id="eventType" value="#{addEventBean.eventType}" required='true' requiredMessage="#{msgs.eventType}">
                        <f:selectItems value="#{addEventBean.eventTypes}" var="etype" itemLabel="#{etype.name}" itemValue="#{etype}"/>
                    </h:selectOneListbox>
                </td>
            </tr>
            <tr>
                <td><h:outputLabel for="title" value="Event Title: "/></td>
                <td><h:inputText id="title" value="#{addEventBean.title}" required="true" requiredMessage="#{msgs.eventTitle}"/></td>
            </tr>
            <tr>
                <td><h:outputLabel for="occuranceDate" value="Event Date: " /></td>
                <td><p:calendar id="occuranceDate" value="#{addEventBean.dateOfOccurance}" required="true" requiredMessage="#{msgs.eventOccuranceDate}" mode="popup" 
                                        showOn="button" showButtonPanel="true" pattern="yyyy/MM/dd" navigator="true" size="10"/>
                </td>
            </tr>
            <tr>
                <td colspan="2" align="center">
                    <table>
                        <tr>
                            <td><p:commandButton value="Cancel" onclick="addEventDlg.hide()" type="button"/></td>
                            <td><p:commandButton value="Submit" action="#{addEventBean.addEventAction()}" type="submit"
                                                         update="addEventForm"
                                                         oncomplete="if( !args.validationFailed) addEventDlg.hide()"/>
                        </tr>
                    </table>
                </td>
            </tr>
        </table>
    </h:form>
</p:dialog>

我的addEventBean的action方法使用注入bean的控制器。

public String addEventAction() throws PersistenceException {
    Event e = ECPEvents.getInstance(eventType);
    e.setActualDate( dateOfOccurance);
    e.setName( title);

    return controller.insertEventAction( e);
}

上一篇文章使用了commandButton的actionListener。我想用行动。我尝试过这两种行为都没有改变。

我正在使用mojarra 2.2,primefaces 3.5和tomcat 7。

有什么想法吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

您是否尝试将表格放入带有id(ed panelId)的p:面板中并尝试 过程=&#34; panelId&#34;