使用 <jsp:useBean> 中的构造函数初始化 class

Initialize class with constructor in <jsp:useBean>

我正在尝试通过将参数传递给构造函数来初始化 class。我需要的范围是 "page"。我知道我的构造函数中有一个参数,但我如何才能有一个使用 <jsp:useBean> 接受参数并且可以从 JSP 页面调用的参数?

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

如果没有无参构造函数,我们可以使用< jsp:useBean id="someId" class="mypackage.A" scope="page" />标签。但是在 useBean JSP 标记中,您不能调用任何构造函数。

有什么方法可以用构造函数初始化 class 吗?

没有

要么使用<jsp:setProperty>,

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

或者使用普通的 servlet:

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

顺便说一下,您在问题上标记了 [servlets],这通常不会与 <jsp:useBean> 一起使用,因为这两种管理 bean 的方法相互冲突(一种是 MVC 级别 1另一个是 MVC 级别 2)。有关详细信息,另请参阅 our servlets wiki page

尽管如此,拥有 HttpServletRequest 类型的 属性 豆是可疑的。毫无疑问,有更好的方法可以实现 the concrete functional requirement for which you incorrectly thought that this all would be the right solution.