@ViewScoped свободен и воссоздается, когда я нажимаю кнопку - PullRequest
0 голосов
/ 04 октября 2019

ОБНОВЛЕНИЕ
После комментариев я попытался свести пример кода к минимальной части, и (благодаря Балушу) я обнаружил, что это не связано с наследованием, ни с jpa, ни со ссылкой на затмение. ,Простая страница с двумя кнопками и одним контроллером, имеющим только одно поле: при первом нажатии одной кнопки она не перезагружает страницу и не выполняет прослушиватель, во второй раз перезагружается страница и никогда не вызывается прослушиватель. Выполните две частикода

partdetails.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!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:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title></title>
    </h:head>
    <h:body>

        <h:form id="form">
            <div class="border">
                    <h:outputText value="#{partDetailsController.editing}" />
            </div>
            <h:panelGrid columns="2">
                <f:facet name="footer">
                    <br />
                    <p:commandButton id="btnEditCancel" value="Cancel" update=":form" actionListener="#{partDetailsController.onBtnEditCancelClick}" 
                                      immediate="true" />
                    <p:commandButton id="btnEdit" value="Edit" update=":form" actionListener="#{partDetailsController.onBtnEditClick}" 
                                     style="margin-right: 0.9em;" />
                </f:facet>
            </h:panelGrid>
        </h:form>
    </h:body>
</html>

и контроллера (partDetailsController.java)

package test.controllers.views;

import java.io.Serializable;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;

@ManagedBean
@ViewScoped
//public class PartDetailsController extends PartBaseController implements Serializable
public class PartDetailsController  implements Serializable
{

    private static final long serialVersionUID = 6704867527770742213L;

    private boolean editing = false;
    private static final Logger LOG = Logger.getLogger(PartDetailsController.class.getName());

    /**
     * Costruttore della classe.
     */
    public PartDetailsController()
    {
       LOG.info("constructor");

    }

    @PostConstruct
    public void init()
    {
        LOG.info("init");

    }

    public boolean isEditing()
    {
        return editing;
    }

    public void setEditing(boolean editing)
    {
        this.editing = editing;
    }

    public void onBtnEditClick(ActionEvent event)
    {
        LOG.info("edit pushed, editing value was "+ isEditing());
        editing = true;
    }

    public void onBtnEditCancelClick(ActionEvent event)
    {
        LOG.info("cancel pushed, editing value was "+ isEditing());
        editing = false;
    }

}

Приложение имеет аутентификацию, в web.xml

    <login-config>
        <auth-method>FORM</auth-method>
        <realm-name>ourSecurity</realm-name>
        <form-login-config>
            <form-login-page>/login.xhtml</form-login-page>
            <form-error-page>/permissiondenied.xhtml</form-error-page>
        </form-login-config>
    </login-config>

Чтобы описать поведение, используя распечатанный журнал:
Загрузите страницу -> в журнал «конструктор», «init» (как и ожидалось)
Нажмите «Правка» -> в журнал ». , значение редактирования было ложным "(как и ожидалось)
Нажмите Редактировать еще раз -> в журнал" Конструктор "," init "(ожидаемое" редактирование отправлено, значение редактирования было истинным ")
С этого момента слушательбольше никогда не вызывается, пока вы не перезагрузите страницу в браузере

У вас есть какие-либо подсказки, где искать?

спасибо


ОБНОВЛЕНИЕ 2 Приложение бuild с простыми лицами 3.5


ОБНОВЛЕНИЕ 3

мы используем JSF 2.2

Мы протестировали его в среде glassfish3.1.2 и на Payara5тоже

...