为什么$ {bean.property}在JSP中自动创建一个bean?

时间:2016-03-17 10:40:14

标签: jsp jsf el managed-bean

我知道JSP已被弃用。

Here,提到

  

在JSP中,$ {}在不存在时不会自动创建托管bean   范围。因此,如果您可以保证#{}开启,则只能使用它   在之前的某个地方使用过相同的托管bean   组件树,还可以查看构建时间与视图渲染时间   生命周期考虑在内。

为了检查它的真实与否,我想出了这个:

像这样的简单JSP页面,

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <html>
        <head>
        </head>
        <body>

            ${myPlayersBean.playerName}
            Here
        </body>
    </html>

,其中

@ManagedBean(name = "myPlayersBean")
@RequestScoped
public class PlayersBean {

    private String playerName = "Rafael";
    // getters & setters
}

它会在点击http://localhost:8080/Leonard/faces/create.jsp

时输出
Rafael Here

请建议?

1 个答案:

答案 0 :(得分:1)

这句话,

  

在JSP中,当$ {}不在范围内时,$ {}不会自动创建托管bean

仅适用于使用JSF 1.1或更早版本或使用JSP 2.0或更早版本的情况。从JSF 1.2和JSP 2.1开始,JSF EL与JSP EL unified,这就是它开始工作的原因(通过javax.el.CompositeELResolver)。

但是,不建议使用${...}来访问JSF托管bean。它不可写,而#{...}是可写的,因此您确实需要在输入组件中使用#{...}。在同一个JSF页面中混合${...}#{...}可能最终会让未来的代码阅读器/维护者感到困惑。