Когда я пытаюсь получить значение из компонента (аннотировано @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() {
}
}