`
seasons
  • 浏览: 108552 次
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

JSP2.1 Deferred Expression的一点笔记

阅读更多
Deferred Expression是JSP2.1中的新特性, 说白了就是因为原来JSF中有了这个,然后想把JSP和JSF的EL都给统一起来, 就弄了Unified Expression Language, Sun的文档也讲了一些. 规范也讲了一些.
 
看看Sun的关于这个的一些code:
 
在JEETCK CTS5中,这是一个最简单的用法, 其实没有体现Deferred Value这个Deferred的作用, 只是说了如何用.
JSP: 是这样在JSP页面调用的.
xml 代码
 
  1. <test:ELDeferredValueValueTag litExpr="foo" poundExpr="#{foo}"/>  
这里这个poundExpr是Deferred Expression.
<test:eldeferredvaluevaluetag litexpr="foo" poundexpr="&amp;lt;b&gt;#{foo}&lt;/b&gt;"></test:eldeferredvaluevaluetag>
 
TLD: 这里面决定是否用Deferred, 其实配置起来还有许多变化.
    <attribute></attribute>
xml 代码
 
  1. <attribute>  
  2.   <name>poundExpr<!---->name>  
  3.   <required>true<!---->required>  
  4.   <deferred-value>    //here define to be deferred expression value   
  5.     <type>java.lang.String<!---->type>  
  6.   <!---->deferred-value>  
  7. <!---->attribute>  

   
 
ELDeferredValueValueTag:具体用还是要在Tag Handler中体现, 这里是个simple tag. 
这里用的是ValueExpression, 也是JSP2.1中新引入的. 
java 代码
 
  1. public void setPoundExpr(ValueExpression poundExpr) {//here must use ValueExpression   
  2.     this.poundExpr = poundExpr;   
  3. }   
  4. public void doTag() {   
  5.     ...   
  6.     String poundVal = (String) poundExpr.getValue(elContext);   
  7.     ...   
  8. }  

But not show how deferred expression works
因为TCK中没有讲到如何个deferred法, 然后去看看JSF的实现.
In JSF RI:
JSP:
<h:inputtext value="#{color}}"></h:inputtext>
 
  1. <h:inputText value="#{color}}" />  
html_basic.tld:
 
  1. <tag-class>  
  2.     com.sun.faces.taglib.html_basic.InputTextTag   
  3. <!---->tag-class>  
  4. <tei-class>  
  5.     com.sun.faces.taglib.FacesTagExtraInfo   
  6. <!---->tei-class>  
  7. <attribute>  
  8.     <description>  
  9.         <!---->  
  10.     <!---->description>  
  11.     <name>  
  12.         value   
  13.     <!---->name>  
  14.     <required>  
  15.         false   
  16.     <!---->required>  
  17.     <deferred-value>  
  18.         <type>  
  19.             java.lang.Object   
  20.         <!---->type>  
  21.     <!---->deferred-value>  
  22. <!---->attribute>  
  23. <attribute>  

<tag-class></tag-class>
 Tag handler file:
InputTextTag.setProperties() //set the value to UIComponent
    UIComponentELTag.createComponent
 
javax.faces.component.UIInput
在JSF中还没有发现更多的, 主要是对JSF还不是很熟悉, 看来得先看看JSF.
之前一直想看看单纯用JSP如何使用deferred expresstion的, 但现在一想, jsp只有request/response这一个阶段, 因此不好用. 但JSF也是用jsp实现的, 它是如何实现多个phase的呢?
http://angraze.wordpress.com/2006/10/03/the-jsfjsp-el-mess/ 这篇文章似乎抨击sun的策略, 认为sun这样搞得很混乱.
猜测一下JSF是这样处理deferred expression的:
1. 用javascript把页面某个field跟某个ValueExpression对象关联起来
2. 在不同的lifecycle phase, 把页面某个field跟ValueExpression对象进行同步.
3. 一开始,evaluate expression的值, 然后javascript把值传给后台, 通过UIInput set property到封装的ValueExpression上.
4.在后面的phase, 需要重新evaluate这个expression的值, 则又先get property,通过javascript修改页面的element
 
得再看JSF.
 
分享到:
评论

相关推荐

    谈谈jQuery之Deferred源码剖析

    ### jQuery之Deferred源码剖析知识点 #### 一、Deferred和Promise简介 jQuery的Deferred对象是jQuery在ES6的Promise概念出现之前的一种实现,它允许开发者将异步操作的结果通过链式调用的方式处理,避免了传统的...

    Decalicious – Deferred Decal System v1.5

    Decalicious is here to satisfy all your longings for fancy Deferred Decals! Deferred Decals: Modify albedo, normals, specular, smoothness and emission for a plethora of effects Full Lighting & ...

    Shawn的Deferred Shading ppt 翻译

    延迟着色(Deferred Shading)是一种在3D图形渲染领域广泛应用的技术,特别是在现代游戏和高级图形应用程序中。这种技术由Shawn Hargreaves等人提出并广泛推广,它改变了传统即时着色(Forward Shading)的方式,...

    Shawn的Deferred Shading原文讲解ppt

    《延迟渲染技术详解——以Shawn的 Deferred Shading 原理解析》 在计算机图形学领域,延迟渲染(Deferred Shading)是一种先进的渲染技术,主要用于实现复杂的光照效果和提高图像质量。它与传统的前向渲染(Forward...

    Deferred

    在JavaScript编程中,“Deferred”是一个重要的概念,尤其在异步编程和Promise机制中扮演着核心角色。 Deferred对象是jQuery引入的,后来被ES6的Promise所吸收,它为解决回调地狱问题提供了有效的解决方案。这篇博客...

    Shawn的Deferred Shading翻译

    翻译《Deferred Shading》(2004年Shawn Hargreaves的经典文章)

    jQuery的deferred对象详解

    jQuery的deferred对象是为了解决在JavaScript编程中经常遇到的异步操作而设计的一个功能强大的解决方案。在开发网站的过程中,我们经常需要处理一些耗时很长的操作,这些操作可能是异步的,如ajax读取服务器数据,也...

    Deferred:Deferred JS 库 - JQuery Deferred 的替代品

    #Deferred.JS 介绍 Deferred.JS 可以轻松处理异步进程(如AJAX等)。 Deferred.JS 是JQuery Deferred objects的替代品。 (行为与 JQuery Deferred 相同)。 阅读以了解为什么您应该从 JQuery Deferred 迁移到 ...

    jQuery的deferred对象使用详解

    jQuery中的deferred对象是自jQuery 1.5.0版本引入的一种新特性,旨在解决JavaScript中异步操作的回调函数管理问题。deferred对象可以看作是一种特殊的对象,它允许你延迟到某个未来时刻执行某项操作。它是jQuery的回...

    jQuery中的deferred对象和extend方法详解

    jQuery中的`deferred对象`和`extend方法`是JavaScript异步编程的重要工具,尤其在处理AJAX请求和其他异步操作时非常有用。`deferred对象`是jQuery 1.5.0版本引入的,它提供了一种更优雅的方式来管理回调函数,解决了...

    Decal Master Advanced Deferred Decals v1.24

    Decal Master 是一款功能强大并且使用简单的 Unity 贴花系统。 贴花放置工具提供简单易用的工作流程以便在游戏世界的各种表面放置贴花。 主要功能: * PBR 贴花着色器(反照率 、法线 、镜面闪光泽 、辐射) ...

    在jQuery 1.5中使用deferred对象的代码(翻译)

    jQuery中的Deferred对象是1.5版本引入的重要特性,它主要用于处理JavaScript中的异步编程模式。在传统编程中,异步操作的处理较为复杂,常常需要嵌套回调函数,使得代码难以阅读和维护。而Deferred对象提供了一种更...

    在jQuery1.5中使用deferred对象 着放大镜看Promise

    在jQuery 1.5中,`Deferred`对象的引入是为了更好地处理异步操作,特别是与AJAX请求相关的回调。`Deferred`对象是基于Promise模式的一种实现,它允许开发者以链式调用的方式组织异步代码,提高了代码的可读性和可...

    android-deferred-object, 在 jQuery http上,Android实现延迟对象 Pattern的实现.zip

    android-deferred-object, 在 jQuery http上,Android实现延迟对象 Pattern的实现 Android延迟对象Android-Deferred-Object是一个of实用工具对象,可以以将多个回调 register 调回回调队列,调用回调队列和异步功能...

    2014-10-16-深入理解jQuery(4)——Deferred1

    Deferred对象在jQuery中的应用和实现机制 Deferred对象是jQuery中的一种异步编程解决方案,它可以使得异步编程变得更加简洁和可读。Deferred对象的出现是为了解决异步编程中的回调函数问题,使得代码更加简洁和易于...

    Deferred Shader延迟渲染的例子

    延迟渲染(Deferred Shading)是一种在3D图形处理中用于提高效率的技术,它与传统的立即模式渲染(Forward Rendering)有着显著的区别。立即模式渲染会在每个像素上执行所有的光照计算,对于复杂的场景,尤其是光照...

    深入解析jQuery中Deferred的deferred.promise()方法

    在JavaScript的世界里,jQuery库提供了一种强大的异步编程机制,即Deferred对象。 Deferred对象的主要目的是简化异步操作的管理,特别是在处理多个异步任务时。`deferred.promise()`是 Deferred 对象的一个重要方法...

    android-deferred,.zip

    `android-deferred` 是一个针对Android平台的库,它受到了jQuery的`deferred`对象的启发,并由Ray Tsang基于jdeferred库进行改进和分支。这个开源项目旨在为Android开发者提供一种更加灵活和方便的方式来组织和管理...

    OpenGL-Deferred.zip

    OpenGL-Deferred.zip是一个压缩包,其中包含了在Visual Studio 2015环境下使用OpenGL实现延迟渲染的项目资源。延迟渲染是一种先进的计算机图形学技术,它通过分阶段处理场景中的几何体和光照信息来提高渲染质量和...

Global site tag (gtag.js) - Google Analytics