dialogReturn事件

时间:2017-01-30 14:56:29

标签: jsf primefaces

在我看来,我有一个禁用p:inputText显示了一些地址信息。 p:inputText的值由dialogReturn监听器onAdresseDialogReturn()设置。除了这个inputText,我还有其他几个输入字段(p:selectOneMenup:inputText)。

每当我更改其他输入组件的某些值并尝试离开页面时,我会从detectUnsavedChanges JavaScript中收到警告对话框。

我现在的问题是,当dialogReturn侦听器更改inputText字段的值时,我也想要此警告消息 - 但这不会发生!

所以我的问题是,我怎样才能做到这一点?

这里p:inputText使用p:commandButton使用primefaces对话框架:

<ui:composition>

    <ui:define name="head">
        <h:outputScript name="js/detectUnsavedChanges.js"/>
    </ui:define>

    <ui:define name="content">
        <h:form id="form">
            <p:panelGrid>
                <p:row>
                    <p:column>
                        <p:commandButton id="save" value="Save" ajax="false" action="#{bean.save}"/>
                    </p:columns>
                </p:row>
            </p:panelGrid>

            <p:panelGrid>
                <p:row>
                    <p:column>
                        <p:inputText id="adresse" disabled="true" size="50"
                                     value="#{bean.adresse}"/>
                        <p:commandButton id="adresseAuswahl" 
                                         title="Adresse bearbeiten"
                                         process="@this"
                                         actionListener="#{bean.showAdresseDialog}">
                            <p:ajax event="dialogReturn" update="adresse"
                                    listener="#{bean.onAdresseDialogReturn}"/>
                        </p:commandButton>  
                    </p:columns>
                </p:row>
            </p:panelGrid>
        </h:form>
    </ui:define>
</ui:composition>

这是我的bean中的dialogReturn监听器:

public void onAdresseDialogReturn(SelectEvent e) {
    final Adresse adresse = (Adresse) e.getObject();
    boolean changedAdresse = Optional.ofNullable(adresse).isPresent() 
            && !getAdresse().equals(adresse);
    if (changedBauvorhabenAdresse) {
        // Adresse has been changed
        setAdresse(adresse);
    }
}

这是BalusC从How to detect unsaved data in form when user leaves the page?提到的JavaScript代码:

$(function() {
    // Set the unload message whenever any input element get changed.
    $(':input').on('change', function() {
        setConfirmUnload(true);
    });

    // Turn off the unload message whenever a form get submitted properly.
    $('form').on('submit', function() {
        setConfirmUnload(false);
    });
});

function setConfirmUnload(on) {
    var message = "You have unsaved data. Are you sure to leave the page?";
    window.onbeforeunload = (on) ? function() { return message; } : null;
}

我的环境:Wildfly-10.0.0.Final上的Primefaces 6.0

欢迎任何提示 - 谢谢!

1 个答案:

答案 0 :(得分:0)

尝试在oncomplete内的p:ajax添加commandButton属性。 我实际上并不知道你是否可以在p:ajax中放置p:commandButton组件但是在oncomplete属性中你应该像这样调用setConfirmUnload(true):

                   <p:commandButton id="adresseAuswahl" 
                                     title="Adresse bearbeiten"
                                     process="@this"
                                     actionListener="#{bean.showAdresseDialog}">
                        <p:ajax event="dialogReturn" update="adresse"
                                listener="#{bean.onAdresseDialogReturn}" oncomplete="setConfirmUnload(true)"/>
                    </p:commandButton>