Метод в сессионном bean-объекте возвращает ноль для ненулевого поля - PullRequest
0 голосов
/ 05 ноября 2018

Когда я пытаюсь получить значение из компонента (аннотировано @SessionScoped), используя метод getContractNumber(), я получаю null. Однако при прямом доступе к полю parameters.contractNumber результатом является правильное значение из запроса. Я понимаю, что JavaEE передает мой bean-объект, и в этом случае я бы ожидал обратного эффекта. Как мне получить доступ к значению моего бобового поля? Я не хочу использовать поле напрямую.

import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.inject.Provider;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
import java.io.Serializable;

import static org.apache.commons.lang3.StringUtils.isNotBlank;


public class InitialRequestParametersFilter implements Filter {

    @Inject
    private Provider<InitialRequestParameters> parameters;

    @SessionScoped
    public static class InitialRequestParameters implements Serializable {
        private String contractNumber = null;

        InitialRequestParameters() {}

        private void setContractNumber(String contractNumber) {
            this.contractNumber = contractNumber;
        }

        public Optional<String> getContractNumber() {
            return Optional.fromNullable(contractNumber);
        }
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
        final String contractNumberFromRequest = servletRequest.getParameter("contractno");
        if(isNotBlank(contractNumberFromRequest)) {
            parameters.get().setContractNumber(contractNumberFromRequest);
        }
        // this returns the request parameter
        System.out.println(parameters.get().contractNumber);
        // this returns Optional.absent() !!!
        System.out.println(parameters.get().getContractNumber());
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {
    }
}
...