Инициализируйте класс с помощью конструктора в <jsp: useBean>

Я пытаюсь инициализировать класс, передав параметр конструктору. Мне нужно, чтобы область была "страница". Я знаю, что у меня есть один аргумент в моем конструкторе, но как мне получить тот, который принимает параметр, используя <jsp:useBean>, а можно вызвать со страницы JSP?

 public class A extends B {
    A(ServletRequest req) {
       super(req);
}

Если нет конструктора без аргументов, мы можем использовать < jsp:useBean id="someId" class="mypackage.A" scope="page" /> тег. Но в JSP-теге useBean нельзя вызывать конструктор.

Есть ли способ инициализировать класс с помощью конструктора?

1 ответ

Решение

Нет.

Либо использовать <jsp:setProperty>,

<jsp:useBean id="someId" class="mypackage.A" scope="page">
    <jsp:setProperty name="someId" property="request" value="${pageContext.request}" />
</jsp:useBean>

или используйте обычный сервлет:

request.setAttribute("someId", new A(request));

Кстати, удивительно, что вы пометили [servlets] на вопрос, в то время как это обычно не должно использоваться вместе с <jsp:useBean> поскольку эти два подхода к управлению bean-компонентами противоречивы (один - уровень MVC 1, а другой - уровень 2 MVC). Подробности смотрите также на нашей вики странице сервлетов.

Тем не менее, имея свойство бина HttpServletRequest тип рыбный. Несомненно, существуют лучшие способы для достижения конкретного функционального требования, для которого вы ошибочно полагали, что это все будет правильным решением.

Другие вопросы по тегам