向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;
遇到了谜一样的数据库链接失败问题不管了