Передать значение введенному EJB

Вот почему динамически созданные элементы не реагируют на клики & nbsp;:

var body = $("body");
var btns = $("button");
var btnB = $("<button>B</button>");
// `<button>B</button>` is not yet in the document.
// Thus, `$("button")` gives `[<button>A</button>]`.
// Only `<button>A</button>` gets a click listener.
btns.on("click", function () {
  console.log(this);
});
// Too late for `<button>B</button>`...
body.append(btnB);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>A</button>

В качестве обходного пути вы должны прослушивать все клики и проверять исходный элемент & nbsp;:

var body = $("body");
var btnB = $("<button>B</button>");
var btnC = $("<button>C</button>");
// Listen to all clicks and
// check if the source element
// is a `<button></button>`.
body.on("click", function (ev) {
  if ($(ev.target).is("button")) {
    console.log(ev.target);
  }
});
// Now you can add any number
// of `<button></button>`.
body.append(btnB);
body.append(btnC);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>A</button>

Это называется «Event Delegation». Хорошие новости, это встроенная функция в jQuery: -)

var i = 11;
var body = $("body");
body.on("click", "button", function () {
  var letter = (i++).toString(36).toUpperCase();
  body.append($("<button>" + letter + "</button>"));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>A</button>

0
задан ps0604 28 March 2019 в 13:52
поделиться

2 ответа

Создайте bean-объект CDI в области запроса, то есть UserContext.

Введите его в оба EJB.

В ServiceEJB установить идентификатор пользователя и в BusinessEJB прочитать его.

0
ответ дан srnjak 28 March 2019 в 13:52
поделиться

Несколько указателей / комментариев:

  1. Если вы интегрируетесь с безопасностью сервера приложений, то имя пользователя будет доступно в любом компоненте. EJB могут получить его, вызвав getCallerPrincipal() для внедренного варианта EJBContext, здесь сервлеты javax.ejb.SessionContext:

    @Resource
    private SessionContext sessionCtx;
    

    могут получить принципал из HttpServletRequest.getUserPrincipal(). Компоненты JAX-RS (ServiceEJB) могут извлечь его из javax.ws.rs.core.SecurityContext.getUserPrincipal().

    Есть ли какая-либо причина, по которой вы НЕ интегрируетесь с безопасностью сервера приложений?

  2. Если у вас есть веская причина НЕ интегрироваться с безопасностью сервера приложений, я бы предложил вариант решение из предыдущего ответа . Вариант состоит в том, чтобы установить пользовательские данные из фильтра, применяемого ко всем ресурсам (либо фильтр сервлета, либо JAX-RS ContainerRequestFilter), чтобы вам не приходилось беспокоиться об их установке в нескольких местах.

  3. Если вам нужен только идентификатор пользователя для регистрации, я бы посоветовал вам взглянуть на концепцию сопоставленных диагностических контекстов (MDC) в slf4j. С его помощью вы можете установить идентификатор пользователя в начале запроса и сделать его доступным для всех операторов ведения журнала в дальнейшем.

0
ответ дан Nikos Paraskevopoulos 28 March 2019 в 13:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: