`
conkeyn
  • 浏览: 1529561 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

关于Struts2.0 标签中采用%{} 的处理原理

阅读更多

 项目中采用struts2.0时,常常使用计算表单式的处理源码原理解析:

例如:

 <s:set var="hasDeductAmount" value =" %{bill.supplier.moneyPool>#amount?#amount:bill.supplier.moneyPool}"> </s:set>

上面的绿色为:value中值的表达式表示的值栈表达式为:去除%{}的表达式
bill.supplier.moneyPool>#amount?#amount:bill.supplier.moneyPool
备注: (1)原理看下面的源代码即可理解:
           (2)#表示OGNL的表达式
 
<input name="billCon.amount" type="text" class="inputbg" value="<s:property value='#hasDeductAmount'/>" />

Struts2.0中的每一个标签的都是以组件形式展示:

Component源代码如下:

 

 /**
     * Finds a value from the OGNL stack based on the given expression.
     * Will always evaluate <code>expr</code> against stack except when <code>expr</code>
     * is null. If altsyntax (%{...}) is applied, simply strip it off.
     *
     * @param expr  the expression. Returns <tt>null</tt> if expr is null.
     * @return the value, <tt>null</tt> if not found.
     */
    protected Object findValue(String expr) {
        if (expr == null) {
            return null;
        }

        //获取OGNL的表达式

        expr = stripExpressionIfAltSyntax(expr);

        //从值栈获取表达式的数据对象

        return getStack().findValue(expr, throwExceptionOnELFailure);
    }

 

    /**
     * If altsyntax (%{...}) is applied, simply strip the "%{" and "}" off. 
     * @param expr the expression (must be not null)
     * @return the stripped expression if altSyntax is enabled. Otherwise
     * the parameter expression is returned as is.
     */
 protected String stripExpressionIfAltSyntax(String expr) {
  return stripExpressionIfAltSyntax(stack, expr);
 }
 
    /**
     * If altsyntax (%{...}) is applied, simply strip the "%{" and "}" off.
     * @param stack the ValueStack where the context value is searched for. 
     * @param expr the expression (must be not null)
     * @return the stripped expression if altSyntax is enabled. Otherwise
     * the parameter expression is returned as is.
     */
 public static String stripExpressionIfAltSyntax(ValueStack stack, String expr) {
  if (altSyntax(stack)) {
            // does the expression start with %{ and end with }? if so, just cut it off!
            if (expr.startsWith("%{") && expr.endsWith("}")) {
                return expr.substring(2, expr.length() - 1);
            }
        }
  return expr;
 }

 转自:http://topmanopensource.iteye.com/blog/570022

 

HTML标签的属性可以被赋值为一个静态的值或一个OGNL表达式。如果你在赋值时使用了一个OGNL表达式并把它用"%{"和"}"括了起来,这个表达式将会被求值。

比如,

      1、下面的label属性将被赋值字符串“useName”:

           label="useName"

      2、而下面这个表达式使用了一个OGNL表达式userName,label属性的值将等于某一个动作类中的userName属性值:

           label="%{useName}"

       3、下面这个表达式将把label属性赋值为会话属性userName的值:

           label="%{#session.userName}"

       4、这个value属性将被赋值为6:

           value="%{1 + 5}"

分享到:
评论

相关推荐

    struts 2.0 详细配置

    Struts 2.0 采用了 MVC(Model-View-Controller)设计模式,将数据模型、用户界面以及业务逻辑分开处理,使得应用程序结构清晰、易于维护。 1. **什么是 Struts 2?** - Struts 2 结合了 JSP 和 Servlet 技术。 -...

    struts2.0 经典书籍 源码 标签学习合集

    这个压缩包文件包含了关于Struts2.0的经典书籍、源码以及标签的学习资源,对于想要深入理解和使用Struts2.0的人来说,是一份非常宝贵的资料。 首先,让我们从"经典书籍"入手。Struts2.0的书籍通常会涵盖以下知识点...

    struts2.0源代码

    通过深入研究这个Struts2.0的源代码,你可以更好地理解其工作原理,学习如何有效地利用它的特性来构建高效、健壮的Web应用。同时,这也有助于你了解如何将Struts2与其他技术(如Spring、Hibernate等)整合,构建更...

    Struts2.0中文教程

    Struts2.0是Java Web开发中非常重要的一个框架,它是Apache软件基金会的Jakarta项目下的产品,主要用于构建MVC(Model-View-Controller)架构的Web应用。本教程将全面解析Struts2.0的核心概念、配置以及实战技巧。 ...

    struts2.0教程合集

    "Struts2.0中文教程.zip"可能是一系列的教程集合,包含了Struts2.0的进阶主题,如动态方法调用(Dynamic Method Invocation,DMI)、OGNL(Object-Graph Navigation Language)表达式语言的使用、异常处理机制、国际...

    struts2.0中文帮助手册

    5. **标签库**:Struts2.0提供了丰富的标签库,如s:form、s:textfield、s:select等,用于在JSP页面中快速构建UI。手册会介绍这些标签的用法和应用场景。 6. **国际化(i18n)与主题(Theme)**:如何配置和使用...

    Struts2.0中文教程.chm

    Struts2.0是Java企业级开发中广泛使用的MVC框架,它是在Struts1.x的基础上发展起来的,旨在提供更强大的功能、更好的性能和更灵活的架构。本教程全面覆盖了Struts2.0的核心概念和技术,为初学者和进阶开发者提供了...

    struts2.0笔记(1)

    首先,Struts2.0采用拦截器(Interceptor)机制来处理请求,使得业务逻辑与控制逻辑分离,更易于维护。拦截器堆栈允许开发者自定义拦截器,实现如事务管理、权限验证等功能。 在Struts2.0中,Action是处理用户请求...

    Struts2.0文件上传原理

    Struts2.0文件上传原理主要涉及Web应用中处理用户上传文件的功能,这一过程涉及到多个步骤和技术,包括HTTP协议、Multipart/form-data编码、临时文件存储以及后台处理。以下是对Struts2.0文件上传原理的详细解释: ...

    struts2.0之helloword

    在深入学习Struts2.0的过程中,你还会接触到更多高级概念,如OGNL表达式、拦截器链、主题与模板、国际化、异常处理、表单验证等。这些知识点将帮助你构建更复杂的业务逻辑和用户界面,提高开发效率和代码质量。 ...

    最新struts2.0教程

    通过运行这个文件,你可以动手操作,理解每一个组件的工作原理,并逐步掌握Struts2.0的开发流程。 总的来说,Struts2.0教程是Java Web开发者进阶的重要参考资料,通过学习,你不仅可以掌握MVC框架的设计模式,还能...

    struts2.0学习笔记

    Struts2.0使用这样的写法来处理请求。 然后,编写Action类,它是一个Java类,与传统的JavaBean类似,但有一个关键的区别:它包含一个名为`execute()`的方法,该方法抛出异常并返回一个字符串,如`"success"`,表示...

    struts2.0 checkbox标签使用问题

    总之,Struts2.0的`checkbox`标签提供了一种强大且灵活的方式来处理Web表单中的复选框。在实际开发中,我们需要理解其工作原理,正确设置属性,并结合数据库操作,以实现用户友好的交互。同时,合理地运用Struts2的...

    Struts2.0登陆验证代码

    通过这个简单的"Struts2.0登陆验证代码",初学者可以了解Struts2.0的基本架构和工作原理,为后续深入学习和实践打下基础。同时,这也是一个很好的起点,可以在此基础上添加更多的功能,如连接数据库进行真实用户验证...

    struts2.0深入浅出

    《Struts2.0深入浅出》一书详尽阐述了Struts2.0框架的原理、特性和最佳实践,是面向对Java Web开发感兴趣或正在从事相关工作的开发者的重要资源。Struts2.0作为第二代Struts框架,相较于其前身,引入了诸多改进和新...

    struts2.0中英文帮助手册

    Struts2.0是一款强大的Java Web应用程序框架,它在企业级开发中被广泛采用,用于构建基于MVC(Model-View-Controller)模式的Web应用。这个框架以其灵活性、可扩展性和良好的社区支持而著名。Struts2.0中英文帮助...

Global site tag (gtag.js) - Google Analytics