【问题标题】:JSP tags vs expression languageJSP 标签与表达式语言
【发布时间】:2016-11-17 23:27:10
【问题描述】:

下面的JSP标签

<jsp:useBean id=”employee” class=”employee”/>
<jsp:getProperty name=”employee” property=”name”/>

另一个用过的EL

{employee.name}

假设 JSP 编译正确,如果您在访问页面之前在会话中正确填充了一个学生对象,而当学生对象为空时,这两个页面会有什么不同。

谁能给我解释清楚一点?

【问题讨论】:

    标签: jsp servlets jsp-tags


    【解决方案1】:

    JSP 标签:

    official Sun documentation 说:

    &lt;jsp:useBean&gt; 元素定位或实例化一个 JavaBeans 零件。

    它首先尝试定位 豆。如果 bean 不存在,&lt;jsp:useBean&gt; 从 类或序列化模板。

    要定位或实例化 bean,&lt;jsp:useBean&gt; 采用以下内容 步骤,按以下顺序:

    1. 尝试使用您指定的范围和名称定位 bean。
    2. 使用您指定的名称定义对象引用变量。
    3. 如果找到 bean,则在变量中存储对它的引用。如果您指定了类型,则为 bean 提供该类型。
    4. 如果找不到 bean,则从您指定的类实例化它,并将对它的引用存储在新变量中。如果上课 name 代表一个序列化的模板,bean 被实例化 java.beans.Beans.instantiate。
    5. 如果已经实例化(而不是定位)bean,并且如果它有主体标签或元素(在和 ),执行正文标签。

    标签将扫描所有范围,按pagerequestsessionapplication的顺序:

    <jsp:useBean id="beanInstanceName" scope="page|request|session|application" ... >
    

    EL:

    它只在我们为 bean 拥有的所有相同范围(和相同优先级顺序)中找到(从不创建)属性。请务必使用the right EL keywords 访问它们。


    回到您的问题,对于这两种策略,如果您在范围内设置了 student 对象,则两者都将正确获取它并处理其属性。

    否则,useBean 标记将创建一个新对象并将其存储在指定范围内,而 EL 将不打印任何内容,一旦它知道对象何时为空并且不尝试访问其属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多