`

WebWork深度探索之标签库

阅读更多

        由于WebWork本身提供了一套自定义的标签库,而且该标签库支持OGNL,因而在做注册登陆功能的时候,也将其标签库体验了一把。
        以前在使用WAF做Web应用程序的时候,会在HtmlAction中的doEnd方法将所要显示的内容使用SetAttribute方法存入request中,再dispatch(分发)到不同的页面,页面上或者通过getAttribute方法或者使用<c:out>标签显示之。而在WebWork中,由于使用了ValueStack,我们在定义Action的时候,不需要象HtmlAction那样了。而Action本身几乎就是一个普通的JavaBean,而其中的属性值都会存放在ValueStack中,那么setAttribute方法就不再需要了,在JSP页面上,我们使用<webwork:property>标签即可获得相应的属性值。 
        除了property标签之外,if标签也进入了我的使用范围。因为在实现登陆功能的时候,通常都会在登陆成功以后,将原来的输入框隐藏以来,那么就要使用<webwork:if>去实现这样的显示逻辑了。但是我在使用if标签的时候,面临的第一个问题就是如何获得存放在ValueStack的属性值呢?查阅了一下资料,资料中给出的例子是这样的:

<webwork:if test="person.gender == true">
   
<font color="blue">
      
<webwork:property value="greeting"/>
   
</font>
</webwork:if>
<webwork:else>
   
<font color="pink">
      
<webwork:property value="greeting"/>
   
</font>
</webwork:else>

        而我依葫芦画瓢,写下了:

<webwork:if test=" loginId!=' ' "> // 空字符串判断
   
</webwork>

运行的结果并不如我预计的那样,输入框还是显示出来了。当我百思不得其解的时候,我选择了去看源代码。
        从IfTag类中doStart到WebWorkTagSupport类中的findValue,再到CompatUtil中的compat,终于找到了错误的根源。在compat方法有这样的代码:

StringTokenizer st = new StringTokenizer(expr, " ' "true);

         原来是通过" ' "作为token将传入的字符串区划分开的,然后再根据得到的字符串到ValueStack中去找相应的值。很明显,test这样写是错误的,因为test的值会根据Token划分为loginId!=和两个单引号,那么loginId!= 在ValueStack根本就是不存在的。但是当我写成

<webwork:if test=" 'loginId!= ' '"> //// 空字符串判断
    
</webwork>

仍然是不行的。
         到了最后,我只能在Action类中定义了一个新的变量:hasLogined,并在登陆成功之后,将其设为true,然后在JSP页面上,[1]

<webwork:if test="'hasLogined' == true">
    
</webwork>

这样就能实现前面所说的功能了。
        由以上可以发现,在使用WebWork自定义的if标签的时候,要比JSTL中的if标签麻烦,而且,我现在还不知道该如何在test表达式中表示一个空字符串,但是在JSTL中,我经常都会这样用:       

<c:if test="${loginId != ' '}">
    
</c:if>

        我想WebWork的标签库的实现很大一部分上都需要对ValueStack进行存取的操作,而存放在ValueStack中的一般都是Map,因此,在标签当中处处都有键值对(key-value pair),那么就只能通过Token去区分一个String里面包含的key值了。      
       
        PS:在经过了第二天的小小研究之后,我发现以上的说一些地方是错误的,[1]处的改进也是行不通的,我不知道为什么当时会得到正确的结果,而且这个正确的结果后来再也没有办法重现了,我想是因为自己更新了JSP,却忘了在浏览器上刷新了吧。具体的分析请看WebWork深度探索之标签库(续)。这篇Blog原本想删掉的,最后还是保留了下来,我想我不怕丢脸,就当作一面镜子来照照自己,并提醒自己保持严谨的态度吧。

分享到:
评论

相关推荐

    Webwork标签库CHM

    在WebWork框架中,标签库是关键组件之一,它们提供了预定义的JSP标签,这些标签可以方便地与控制器逻辑交互,从而简化视图层的代码。通过使用这些标签,开发者可以避免在JSP页面中编写过多的Java脚本,使页面更易于...

    WebWork标签手册

    WebWork框架作为Struts的一个替代品,提供了一系列强大的标签库,用于简化Web应用的开发过程。其中,数据标签尤其关键,它们不仅能够从值栈中提取数据,还能将变量和对象存储到值栈中,从而实现数据的灵活管理和传递...

    WebWork ww标签

    WebWork WW标签库是专门为WebWork框架设计的一组自定义标签,用于在JSP页面上进行动态数据展示、控制流操作和表单元素渲染。WW标签库提供了丰富的标签,例如`&lt;ww:if&gt;`、`&lt;ww:iterator&gt;`、`&lt;ww:set&gt;`、`&lt;ww:property&gt;...

    WebWork标签库

    ### WebWork标签库详解 #### 引言 WebWork是一个基于MVC模式的Java Web应用框架,它提供了丰富的标签库来简化页面开发过程。本文将深入解析WebWork标签库中的各类标签,帮助开发者更好地理解和应用这些标签,提高...

    webwork标签

    WebWork标签库分为多个类别,包括通用标签、组件化标签、流程控制标签、迭代标签、UI标签、VUI标签以及国际化支持标签。 1. **通用标签**: - `&lt;ww:property&gt;`:用于获取结果的属性值,如果未指定值,将从值栈顶部...

    webwork

    7. **标签库**:WebWork 自带一套丰富的标签库,可以方便地在JSP页面中使用,减少硬编码,提高开发效率。 8. **持久化支持**:WebWork 可以与各种持久化框架如Hibernate、iBatis等集成,方便进行数据库操作。 9. *...

    webwork标签的使用和介绍

    WebWork 是一款基于 Java 的 MVC(Model-View-Controller)框架,它提供了强大的标签库来简化JSP页面的开发。这些标签使得开发者能够更高效地处理业务逻辑、数据展示和用户交互。以下是对WebWork标签的详细介绍: 1...

    Webwork2_guide

    2. **视图(View)**:视图是用户看到和与之交互的界面部分。Webwork2支持JSP、FreeMarker等模板技术来创建视图,开发者可以通过ActionForward或者Struts的Result配置来决定哪个视图应当被渲染。 3. **控制器...

    WebWork UI标签

    WebWork UI标签是一种用于构建Web应用程序用户界面的组件,它提供了丰富的功能,使得开发者能够更加便捷地创建交互式的Web页面。WebWork是一个不绑定特定视图技术的框架,支持多种模板语言,如JSP、Velocity和...

    WebWork标签使用说明

    chm格式的webwork标签帮助文档,英文的

    webwork中使用datepicker标签来选择日期

    WebWork是一个流行的Java Web框架,它提供了丰富的标签库来简化视图层的开发。本文将深入探讨如何在WebWork中使用`datepicker`标签来实现用户友好的日期选择功能。 `datepicker`标签通常与JavaScript库如jQuery UI...

    WEBWORK

    2. **Taglib** 配置:`jsp-config` 部分定义了一个 JSP 标签库(Taglib),即 WebWork 的标签库。`taglib-uri` 指定标签库的唯一标识符,`taglib-location` 指定包含 TLD(Tag Library Descriptor)的 JAR 文件位置...

    webwork-1.4-src.zip_webwork_webwork s_webwork.zip_webwork1.4.zip

    7. **标签库**:WebWork提供了一套自定义的JSP标签,如`&lt;ww:property&gt;`、`&lt;ww:if&gt;`等,这些标签简化了视图层的编写,提高了代码的可读性。 8. **插件系统**:WebWork支持插件扩展,开发者可以方便地添加自定义功能...

    struts与webwork的jar包无冲突版 自定义标签无冲突

    WebWork引入了自己的标签库,包括一些与Struts2标签类似的组件。当同时引入Struts和WebWork的jar包时,由于它们的标签库可能有重叠,可能会导致解析JSP页面时出现冲突,尤其是在Unix环境中,这个问题可能更为突出。 ...

    webwork之HelloWorld篇

    "webwork之HelloWorld篇"是入门WebWork框架的一个基本教程,通常包括创建一个简单的Web应用程序并展示“Hello, World!”的输出。 在Eclipse中创建一个Hello Web工程,首先你需要安装必要的插件,如JSTL和MyEclipse...

    webWork2开发指南

    6. **标签库**:WebWork2提供了丰富的标签库,如logic、bean、html等,这些标签可以帮助开发者更方便地创建动态HTML页面,提高开发效率。 7. **国际化与本地化**:WebWork2支持多语言环境,你可以通过简单的配置来...

Global site tag (gtag.js) - Google Analytics