项目中采用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;
}
分享到:
相关推荐
Struts 2.0 采用了 MVC(Model-View-Controller)设计模式,将数据模型、用户界面以及业务逻辑分开处理,使得应用程序结构清晰、易于维护。 1. **什么是 Struts 2?** - Struts 2 结合了 JSP 和 Servlet 技术。 -...
这个压缩包文件包含了关于Struts2.0的经典书籍、源码以及标签的学习资源,对于想要深入理解和使用Struts2.0的人来说,是一份非常宝贵的资料。 首先,让我们从"经典书籍"入手。Struts2.0的书籍通常会涵盖以下知识点...
Struts2.0是Java Web开发中非常重要的一个框架,它是Apache软件基金会的Jakarta项目下的产品,主要用于构建MVC(Model-View-Controller)架构的Web应用。本教程将全面解析Struts2.0的核心概念、配置以及实战技巧。 ...
通过深入研究这个Struts2.0的源代码,你可以更好地理解其工作原理,学习如何有效地利用它的特性来构建高效、健壮的Web应用。同时,这也有助于你了解如何将Struts2与其他技术(如Spring、Hibernate等)整合,构建更...
"Struts2.0中文教程.zip"可能是一系列的教程集合,包含了Struts2.0的进阶主题,如动态方法调用(Dynamic Method Invocation,DMI)、OGNL(Object-Graph Navigation Language)表达式语言的使用、异常处理机制、国际...
5. **标签库**:Struts2.0提供了丰富的标签库,如s:form、s:textfield、s:select等,用于在JSP页面中快速构建UI。手册会介绍这些标签的用法和应用场景。 6. **国际化(i18n)与主题(Theme)**:如何配置和使用...
Struts2.0是Java企业级开发中广泛使用的MVC框架,它是在Struts1.x的基础上发展起来的,旨在提供更强大的功能、更好的性能和更灵活的架构。本教程全面覆盖了Struts2.0的核心概念和技术,为初学者和进阶开发者提供了...
首先,Struts2.0采用拦截器(Interceptor)机制来处理请求,使得业务逻辑与控制逻辑分离,更易于维护。拦截器堆栈允许开发者自定义拦截器,实现如事务管理、权限验证等功能。 在Struts2.0中,Action是处理用户请求...
Struts2.0文件上传原理主要涉及Web应用中处理用户上传文件的功能,这一过程涉及到多个步骤和技术,包括HTTP协议、Multipart/form-data编码、临时文件存储以及后台处理。以下是对Struts2.0文件上传原理的详细解释: ...
通过运行这个文件,你可以动手操作,理解每一个组件的工作原理,并逐步掌握Struts2.0的开发流程。 总的来说,Struts2.0教程是Java Web开发者进阶的重要参考资料,通过学习,你不仅可以掌握MVC框架的设计模式,还能...
Struts2.0使用这样的写法来处理请求。 然后,编写Action类,它是一个Java类,与传统的JavaBean类似,但有一个关键的区别:它包含一个名为`execute()`的方法,该方法抛出异常并返回一个字符串,如`"success"`,表示...
在深入学习Struts2.0的过程中,你还会接触到更多高级概念,如OGNL表达式、拦截器链、主题与模板、国际化、异常处理、表单验证等。这些知识点将帮助你构建更复杂的业务逻辑和用户界面,提高开发效率和代码质量。 ...
总之,Struts2.0的`checkbox`标签提供了一种强大且灵活的方式来处理Web表单中的复选框。在实际开发中,我们需要理解其工作原理,正确设置属性,并结合数据库操作,以实现用户友好的交互。同时,合理地运用Struts2的...
《Struts2.0深入浅出》一书详尽阐述了Struts2.0框架的原理、特性和最佳实践,是面向对Java Web开发感兴趣或正在从事相关工作的开发者的重要资源。Struts2.0作为第二代Struts框架,相较于其前身,引入了诸多改进和新...
Struts2.0是一款强大的Java Web应用程序框架,它在企业级开发中被广泛采用,用于构建基于MVC(Model-View-Controller)模式的Web应用。这个框架以其灵活性、可扩展性和良好的社区支持而著名。Struts2.0中英文帮助...
Struts2.0教程ChM是一个面向Java EE(J2EE)开发者的资源,主要讲解了如何使用Struts2.0框架进行Web应用开发。Struts2是Apache软件基金会的一个开源项目,它提供了MVC(Model-View-Controller)设计模式的实现,使得...