使用JSF从JSP创建的会话bean

时间:2013-09-09 15:39:49

标签: jsp jsf

所以我使用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为null。你能用'usebean'来访问JSF bean吗?我需要做更多的事情来调用JSP并传递托管bean吗?显然这是一个类,我不认为有理由混合这两个,但唉,这是要求。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:4)

有两个错误:

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

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

  3. 所以,总而言之这应该是:

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

    <c:out>在技术上不是强制性的,您也可以只使用${registration.firstName},但与Facelets相反,旧版JSP没有implicit HTML escaping。所以使用<c:out>在功能上是强制性的,以防止在HTML输出中内联重新显示未经过简化的用户控制输入时出现的XSS攻击漏洞。

    另见: