1

所以我正在使用 JSF 创建和管理一个 bean。然后 JSF 链接到我需要访问托管 bean 的 JSP 页面。JSF 代码:

<h:inputText id="firstName" value="#{registration.lastName}"/>
<h:commandButton value="Register" action="confirm.jsp"/>

JSP:

<jsp:useBean id = "registration" scope = "session"
    class = "Project1.Registration">
</jsp:useBean>

<%=
        registration.getFirstName()
%>

因此,JSP firstName 为空。你可以使用'usebean'来访问JSF bean吗?我需要做更多的事情来调用 JSP 并传递托管 bean 吗?显然这是一个班级,我看不出有理由像这样混合两者,但唉,这是要求。任何帮助表示赞赏。

4

1 回答 1

4

有2个错误:

  1. <jsp:useBean>如果 bean 已经由某些控制器预先创建(例如 JSF 甚至是普通的 vanilla servlet),则不需要。只需通过名称直接访问它。它是一个会话范围的 bean,可以作为会话属性以通常的 EL 方式通过${registration}.

  2. EL 变量和 EL 变量都不是scriptlet范围内<jsp:useBean>可用的直接变量。相反,只需按照通常的方式使用 EL。更重要的是,十多年来一直强烈反对使用scriptlet 。您应该停止使用它们并将您的配置为禁用它们。 <% ... %>web.xml

所以,总而言之,这应该做:

<c:out value="${registration.firstName}" />

技术上不是强制性的<c:out>,您也可以只使用${registration.firstName},但与 Facelets 不同,旧版 JSP 没有隐式 HTML 转义。因此,使用<c:out>在功能上是强制性的,以防止在 HTML 输出中重新显示未经处理的用户控制输入内联时可能发生的 XSS 攻击漏洞。

也可以看看:

于 2013-09-09T15:44:49.637 回答