向ValueStack中存储数据
得到值栈的第一种方式(真麻烦)
ActionContext actionContext = ActionContext . getContext(); Map<String,Object> reqmap = (Map<String, Object>) actionContext.get("request"); ValueStack valueStack = (ValueStack) reqmap.get("struts.valueStack");
第二种方式
HttpServletRequest request= ServletActionContext.getRequest(); ValueStack valueStack = (ValueStack)request.getAttribute(“struts.valueStack”);
第三种方式
ActionContext actionContext = ActionContext.getCOntext(); ValueStack valueStack = actionContext.getValueStack();
这个第二种第三种有点像昨天那个啊,好像是得到context的方式?
等下我瞅瞅
哦不对 是Session ,都是莫名其妙的到request
然后从request里面去出来带引号的名字
向值栈中存储数据
valueStack.put(new Student(“小黑”,20));
这个就放在栈顶了,student类的属性当成name,
还有一个也能存就是直接放外面用private,
setValue(String str,Object obj)
加一个#号,就是向ActionContext中存键值对,键是name,值是pipipi
valueStack.setValue(“#name”,”pipipipi”);
不加#号,就把第一个属性名覆盖了,如果没有这个属性名,就报错了
valuStack.setValue(“name”,”bibibib”);
set(String key ,Object obj)
封装一个hashmap,把key的值当键,
valueStack.set(“stu”,new new Student(“xiaohua”,21);
valueStack.push(new Student(“xiaohua”,22);
我得看看这个set和push有啥用
这个是JSP页面
本来不想写,实在是不知道写什么了
就勉强强写吧
<s:debug></s:debug>
<s:property value=”[0].name”/>
<s:property value=”[1].name”/>
<s:property value=”[2].name”/>
这个问题就是,我后放入了很多没有用的东西(后放的在最上面)
然后它一个一个开始画框,
1,2,3,4,5,6
这些取的值永远都是第一个
好了我们看看实现原理
ActionContext context = ActionContext.getContext();
ValueStack valueStack=context.getValueStack();
Object obj = ValueStack.findValue(“name”);
out.println(obj);
这原理好特么浅啊。。。。。。。
下一项吧
serlvet中的查找顺序
pageContext,request,session,application
Struts中使用el表达式的搜索顺序
request.ValueStack,ActionContext,Session,Applilcation
从值栈找不到,会去actioncontext中查找
没有使用var,每次迭代出来的对象放入 值栈的栈顶
<s:iterator value="stuts" status="st"> <tr> <td><s:property value="#st.count"/></td> <td><s:property value="name"/></td> <td><s:property value="age"/></td> </tr> </s:iterator> </table> <s:iterator value="stuts.{?#this.age>22}" status="st"> <tr> <td><s:property value="#st.count"/></td> <td><s:property value="name"/></td> <td><s:property value="age"/></td> </tr> </s:iterator> <s:iterator value="stuts" var="stu" status="st"> <tr> <td><s:property value="#st.count"/></td> <td><s:property value="#stu.name"/></td> <td><s:property value="#stu.age"/></td> </tr> </s:iterator>
<!--
ognl投影:筛选字段
-->
<s:iterator value="stuts.{name}" status="st">
<tr>
<td><s:property value="#st.count"/></td>
<td><s:property /></td>
</tr>
</s:iterator>
</table>
自己理解吧贼简单看一遍就懂了但是我现在不想看了嘤嘤嘤
哦对这个东西叫令牌,想了半天没想起来
首先在jsp页面上写
<s:token></s:token>
然后再Struts中配置
就是加个拦截器的功效
<interceptor-ref name=”token”></interceptor-ref>
记得把默认加进去
<interceptor-ref name=”defaultStack”></
啊不写了 还有个什么界面
不管了
出道题:暂时想的
1:用户登录
(设上用户名密码验证,后台验证)
2:登录后看到一个表
(用ognl看出来)
(这个表就是注册用户表吧)
3:新增用户
(时间格式,后台验证)
(设置回显,设置回显样式)
不过拦截器是干嘛来着,哦对,看有没有Session,
可以用在show界面前面,ok就这样
也可以想一点别的,关于拦截器
写项目的小总结,边写边总结,
那估计会写的更慢了。。。
继承的是ActionSupport,实现的是 ModelDriven接口
怎么记不住呢
验证器怎么写来着。。。
总算被我(在帮助下)找到了原始的文件
验证器源文件:
Web App Libraries 下
xwork-core-2.3.15.3.jar下(dtd约束也在)
com.opensymphony.xwork2下
validator下
validators下
default.xml
给自己挖的两个坑
只用写 类名-动作名-validation.xml
就可以了
不过是动作名!!动作名!!
记得还要写返回结果,所以才能看到啊(摊手)
<result name=”input”>/login.jsp</result>
C3P0怎么写又忘了。。。。。。。。。。。。
private static DataSource ds = new ComboPooledDataSource();
public static DataSource getDataSource(){
return ds;
遇到了谜一样的数据库链接失败问题不管了
相关推荐
这个类提供了静态方法来解析和解释OGNL表达式,使得开发者能够在运行时动态地访问和操作对象的属性和方法。 在Java编程中,OGNL提供了一种简洁的方式来表达复杂的对象导航路径,它允许我们通过简单的字符串表达式来...
你可以通过阅读源码了解如何实现表达式的解析和求值,以及OGNL如何处理各种复杂情况,如对象链的递归查找、动态方法调用等。此外,源码中的注释通常会提供关于特定函数或类用途的详细信息,这对于学习和调试非常有...
1. **Ognl类**:ognl库的主要入口点,提供静态方法来解析和执行ognl表达式,如`Ognl.getValue()`和`Ognl.setValue()`。 2. **Expression类**:表示ognl表达式,可以被编译并多次执行,提高性能。 3. **OgnlContext...
`ValueStack`是一个存储数据的栈结构,包含了所有的模型对象以及请求、会话和应用范围的数据。开发者可以通过EL表达式直接访问`ValueStack`中的数据,例如: ```jsp ${foo} // 访问ValueStack中的foo ``` 需要注意...
camel-ognl-1.6.4.jar, camel-ognl-2.8.1.jar, com.springsource.org.ognl-2.6.9.jar, com.springsource.org.ognl-sources-2.6.9.jar, ognl-2.5.1.jar, ognl-2.6.11.jar, ognl-2.6.3.jar, ognl-2.6.5.jar, ognl-...
在这个压缩包中,包含的是OGNL的源码和帮助文档,这对于深入理解OGNL的工作原理以及在Struts2中的应用非常有帮助。 OGNL的核心特性包括: 1. **对象导航**:OGNL允许我们通过`.`操作符来访问对象的属性,甚至可以...
3. 动态方法调用:OGNL支持动态方法调用,允许开发者根据运行时的条件选择调用哪个方法,增加了代码的可扩展性。 4. EL(表达式语言)增强:OGNL作为Struts2的默认EL,提供更丰富的功能,比如可以方便地访问集合、...
通过阅读源码,你可以了解OGNL是如何处理复杂的数据结构,如数组、集合和映射,以及如何处理方法调用和条件语句的。 对于开发人员来说,理解ognl的异常处理机制也非常重要。当OGNL表达式执行出错时,它会抛出`...
1. **OGNL基本语法**:介绍OGNL的基本表达式,包括访问对象属性(如`obj.property`),调用方法(如`obj.method()`),以及数组和集合的操作(如`array[0]`,`collection.size()`)。 2. **OGNL的上下文(Context)...
OGNL,全称为Object-Graph Navigation Language,是一种强大的开源表达式语言,主要用于便捷地操作对象的属性和方法。在Struts2框架中,OGNL作为默认的表达式语言发挥着核心作用,允许开发者以简洁的方式访问和修改...
开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12...
OGNL特有的对象索引属性(Object Indexed Properties) 调用方法 变量引用 带括号的表达式 子表达式(Subexpressions)链 构造集合(Collection) 列表(Lists) 数组 映射表(Maps) 对集合的投影(Project) 在集合...
这篇中文资料将帮助你深入理解OGNL的核心概念、语法特性以及实际应用。 一、OGNL的基础知识 1. **对象导航**:OGNL的名称来源于其核心功能——对象图导航。它可以轻松地遍历对象的属性,甚至通过链式调用来访问嵌套...
通过研究 `ognl-2.7.3-src`,开发者可以深入理解 OGNL 的工作原理,这对于优化应用程序性能、调试 OGNL 相关问题以及扩展 OGNL 功能都大有裨益。同时,对于理解其他类似的表达式语言和框架也有一定的借鉴意义。
它的设计目标是提供一种简洁、直观的方式来操纵对象图,包括对象的方法调用、属性访问以及复杂的逻辑和算术运算。在Java Web开发框架如Struts2中,OGNL作为默认的表示层表达式语言被广泛应用。 标题中的“ognl的jar...
3. **支持赋值操作和表达式串联**:OGNL支持赋值操作以及多个表达式的串联,例如`price = 100, discount = 0.8, calculatePrice()`,这个表达式最终会返回计算后的价格`80`。 4. **访问OGNL上下文(OGNL context)和...
赠送jar包:ognl-3.2.21.jar; 赠送原API文档:ognl-3.2.21-javadoc.jar; 赠送源代码:ognl-3.2.21-sources.jar; 赠送Maven依赖信息文件:ognl-3.2.21.pom; 包含翻译后的API文档:ognl-3.2.21-javadoc-API文档-...
OGNL还支持更高级的特性,如条件表达式、列表映射、选择操作、以及函数调用等。例如,`user.addresses[0].city`可以获取用户地址列表的第一个地址的所在城市,而`user.getAge() > 18`则是一个条件表达式,判断用户...
2. **自省(Introspection)**:通过Java反射API,OGNL能动态查找和调用对象的方法,以及读写属性。 3. **列表和映射访问**:支持数组、列表、集合和映射的直接访问,例如`list[0]`或`map['key']`。 4. **方法调用...
阅读OGNL源码可以帮助我们理解其内部工作原理,特别是对于解析器和求值器的设计,以及如何处理各种OGNL语法和操作。这将有助于我们在使用OGNL时更好地调试和优化代码。 总结,OGNL作为强大的表达式语言,其源码揭示...