Очистить форму или вызвать метод, если диалог Primefaces закрыт с помощью кнопки закрытия «X» - PullRequest
0 голосов
/ 08 ноября 2018

Используя простые лица, вы можете создать диалог и установить форму для управления тем, что отображается. Пример кода ниже:

public void enterGroup(){

if(!AuthorizationUtils.isUserInRoles(new String[]{"UPDATER"})){

    FacesContext context = FacesContext.getCurrentInstance();
    context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL,
            "Error",  "The user does not have permissions to perform this 
action."));

    return;


}
else{

Map<String,Object> options = new HashMap<String, Object>();
options.put("resizable", false);
options.put("draggable", false);
options.put("modal", true);
options.put("width", 500);
options.put("height", 90);
options.put("contentWidth", "100%");
options.put("contentHeight", "100%");


PrimeFaces.current().dialog().openDynamic("entergroup",options,null);
}
}

У меня вопрос: знает ли кто-нибудь, существует ли способ контролировать происходящее, если диалог отключен, а не пользователь, выполняющий действия над диалоговым окном. Я знаю, что вы можете установить для closable значение false и полностью исключить X, но это не совсем удобно для пользователя. Мне просто нужно либо иметь возможность сбросить мою диалоговую форму при нажатии X, либо выполнить метод, который очищает некоторые из моих Бинов, и мне было интересно, есть ли способ сделать это. Это скорее косметика, чем жизненно важно. Любая помощь будет оценена! Я включил xhtml ниже, если это помогает в рисовании картины.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">

<h:head>
<title>Enter the Name of the new group</title>
<style type="text/css">
.ui-widget {
font-size: 90%;
}
</style>
</h:head>

<h:body>
<div class="main">
    <h:form method="post">

        <p:panelGrid columns="3" styleClass="ui-noborder">
            <p:outputLabel for="newgroupname" value="Group Name: "> 
</p:outputLabel>
            <p:inputText id="newgroupname" value="#{addgroup.newGroupName}" 
/>
            <p:commandButton action="#{addgroup.addNewGroup}" 
value="Submit"></p:commandButton>

        </p:panelGrid>

        <h:outputText value="#{addgroup.dialogMessage}" style="color: red;"> 
</h:outputText>

    </h:form>
</div>
</h:body>

</html>

1 Ответ

0 голосов
/ 08 ноября 2018

Вы можете сделать это таким хакерским способом:

MyBean.java * * 1004

import static java.util.Collections.emptyMap;
import java.util.HashMap;
import java.util.Map;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import org.primefaces.PrimeFaces;

@Named
@RequestScoped
public class MyBean {
    public void dfShow() {
        Map<String, Object> options = new HashMap<>();
        // ...
        PrimeFaces.current().dialog().openDynamic("entergroup", options, emptyMap());
    }

    public void dfClosed() {
        PrimeFaces.current().dialog().closeDynamic("X");
    }
}

А у тебя entergroup.xhtml:

<h:body>
    <h:outputScript>
    $(document).ready(function(){
        // try to get a reference to the DF widget from top window context:
        var dfWidgetVar = window.top.$('[data-pfdlgcid]').attr('data-widgetvar');
        var dfWidget = window.top.PF(dfWidgetVar);

        // clear closeIcon click event listener stack and add your remoteCommand:
        dfWidget.closeIcon.unbind('click').on('click', dfClosed);
    });
    </h:outputScript>

    <h:form>
        ...         
        <p:remoteCommand name="dfClosed" action="#{myBean.dfClosed}"/>
    </h:form>

</h:body>
...