知识点:struts2页面标签和ognl
1、struts2页面标签
要使用struts2的标签必须在jsp页面导入<%@ taglib prefix="s" uri="/struts-tags"%>
1.1、select标签(代码如下)
<!-- select标签 #表示取值栈中的值 attr. 不需要指定作用域-->
<s:select list="#attr.list" name="mylist" listKey="age" listValue="uname" headerKey="0" headerValue="请选择" size="7" >
</s:select>
注意:#表示取值栈中的值,而attr表示不需要指定作用域,用的比较多,但是用request也是可以的。
struts2首先访问jsp页面的时候,不会像struts1一样调用get方法来初始化页面的标签,而是直接到值栈中去拿值(容错能力比struts1强)
1.2、checkboxlist标签(代码如下)
<!-- 复选框 checkbox -->
<s:checkboxlist list="#attr.list" name="mycheckbox" listKey="age" listValue="uname" ></s:checkboxlist>
注意:当在页面上选中select标签的值或者checkbox的值,假如要在后台拿选择的情况,则必须定义相应的变量,命名必须和页面相应标签的名字相同,当是checkbox时,则action中定义拿值的变量必须是数组。假如页面有多个标签则后台必须有相对应的拿值属性,否则会报空指针错误(代码如下)
package cn.zhuojingxinxi.web;
import java.util.ArrayList;
import java.util.List;
import org.apache.struts2.ServletActionContext;
import cn.zhuojingxinxi.entity.Users;
public class UsersAction {
private Users users=null;
private int [] mycheckbox;
private int [] mylist;
public int[] getMycheckbox() {
return mycheckbox;
}
public void setMycheckbox(int[] mycheckbox) {
this.mycheckbox = mycheckbox;
}
public int[] getMylist() {
return mylist;
}
public void setMylist(int[] mylist) {
this.mylist = mylist;
}
public int[] getCheckbox() {
return mycheckbox;
}
public void setCheckbox(int[] mycheckbox) {
this.mycheckbox = mycheckbox;
}
public Users getUsers() {
return users;
}
public void setUsers(Users users) {
this.users = users;
}
public String execute(){
ServletActionContext.getRequest().setAttribute("list", getList());
if(mycheckbox!=null){
for (int i = 0; i < mycheckbox.length; i++) {
System.out.println(mycheckbox[i]);
}
}
return "success";
}
public List<Users> getList(){
List<Users> list=new ArrayList<Users>();
Users users1=new Users();
users1.setUname("zhangsan");
users1.setAge(21);
list.add(users1);
Users users2=new Users();
users2.setUname("lisi");
users2.setAge(24);
list.add(users2);
Users users3=new Users();
users3.setUname("wangwu");
users3.setAge(25);
list.add(users3);
return list;
}
}
1.3、迭代(见证ognl的强大之处,能够调用后台的方法这是EL表达式不能做到的)
<s:iterator value="#attr.list" status="i" id="u">
<s:property value="#u.test()"/>
</s:iterator>
其中test方法是定义在后台实体类Users中的。执行这段代码能在页面中输出三个sss
package cn.zhuojingxinxi.entity;
public class Users {
private String uname;
private int age;
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String test(){
return "ssss";
}
}
# 的三种用途:1、取值栈中的值
<s:set name="myage" value="20"></s:set>
<s:property value="#myage"/>
2、投影一个集合
? 的用途是给条件
<s:iterator value="#attr.list.{?#this.age>20}.{uname}">
<s:property />
</s:iterator>
3、构建一个map
<s:set name="mymap" value="#{'one':'first','two':'second'}"></s:set>
<s:iterator value="#mymap">
<s:property value="key"/>
<s:property value="value"/>
</s:iterator>
% 取资源文件中的内容(或者计算字符串的值类似于js中的eval,可用于做国际化)
<s:submit value="%{#mymap.one}"></s:submit>
<s:textfield name="ssss" label="%{getText('uname')}"></s:textfield>
以上拿的是国际化资源文件中键为uname的值,假如在action要拿资源文件中的值可以继承actionSupport,然后可以在execute方法中调用this.getText("uname");
@ 表示调用静态方法
<s:if test="@cn.zhuojngxinxi.biz.UserService@login('aasssaa')">
登录成功
</s:if>
<s:else>
失败
</s:else>
后台login代码:
package cn.zhuojingxinxi.biz;
public class UserService {
public static Boolean login(String uname){
if(uname!=null&&uname.length()>6){
return true;
}
return false;
}
}
源码下载请点这里:
分享到:
相关推荐
NULL 博文链接:https://1136051009.iteye.com/blog/1768000
本教程将带你从零开始学习Struts2,通过第七个部分的内容,我们将深入理解其核心概念和实际应用。 首先,让我们探讨Struts2的基础知识。Struts2是Apache软件基金会的产品,它是基于Struts1的升级版,引入了更多现代...
在"Struts2从零开始(三)"这个主题中,我们将会深入探讨Struts2的核心概念和实际应用,逐步了解如何使用Struts2来构建一个Web应用程序。 1. **MVC设计模式**:Struts2遵循Model-View-Controller(MVC)设计模式,...
本教程将从零开始,帮助你深入理解并掌握Struts2的核心概念和实践技巧。 首先,我们要理解Struts2的核心架构。Struts2通过拦截器(Interceptor)机制实现了请求处理流程的控制,它允许开发者插入自定义的逻辑来扩展...
在“Struts2从零开始(二)”这个主题中,我们将会深入探讨Struts2的核心概念和实践操作,以帮助初学者更好地理解和掌握这个框架。 首先,Struts2的核心在于它的Action类,它是业务逻辑处理的主要组件。Action类...
本篇文章将从零开始,逐步介绍如何使用Struts2进行开发,带你走进Struts2的世界。 首先,让我们理解Struts2的核心概念。Struts2是一个轻量级、可扩展的MVC框架,它继承了Struts1的优点并解决了其不足,如性能问题和...
这个"Struts 从零开始"的压缩包显然是为初学者提供的一套学习资源,包含了六个基础练习工程,帮助理解并实践 Struts 框架的关键概念和功能。 首先,让我们深入了解一下 Struts 框架的核心组件和原理: 1. **控制器...
从Struts2.1版本开始,推荐使用Convention插件替代Codebehind插件,因为它更加自动化,几乎无需手动配置。 Convention插件的工作原理是基于“约定优于配置”(Convention over Configuration)的原则,它会自动识别...
### Struts2零配置个人整理文档 #### 一、Convention插件详解 ##### 1. 设置结果页面路径 - **背景介绍**:Struts2框架提供了便捷的方式来处理Web请求,并返回响应视图。为了简化配置过程,Struts2提供了一个名为...
从Struts2.1版本开始,`Codebehind`插件被`Convetion`插件取代,以提供更全面的零配置支持。`Convetion`插件通过自动扫描和推理应用程序中的类和方法来配置Action和结果映射,不需要开发者显式地在`struts.xml`或...
使用这个“struts2资源包”,开发者可以快速搭建一个基于Struts2的Web应用,无需从零开始配置所有的依赖。通过导入这些库,你可以实现动作类的定义、拦截器的设置、结果页面的跳转、表单验证、国际化、文件上传下载...
2. 例子工程说明..........................................................3 3. 建立工程..............................................................4 3.1. 创建新的Web Project ..........................
在本文中,我们将探讨如何使用Struts2和jQuery EasyUI框架创建一个简单的CRUD(创建、读取、更新、删除)系统。首先,我们需要理解这两个技术的基础概念。 Struts2是一个基于MVC(Model-View-Controller)架构的...
在“struts2零配置入门代码”这个主题中,我们将深入探讨如何在不编写大量XML配置文件的情况下,启动并运行一个基本的Struts2应用程序。 Struts2的核心在于它的Action类,它是业务逻辑处理的主要组件。在“零配置”...
最后,文档可能包含了一些实战示例,引导读者从零开始搭建一个完整的Struts2项目,通过实际操作加深对理论知识的理解。 总的来说,这份Struts2参考文档全面覆盖了Struts2框架的主要概念和技术,对于想要学习或已经...
12. **实战案例**:通过实际项目示例,展示如何从零开始构建一个完整的Struts2应用,涵盖需求分析、设计、编码和测试的全过程。 通过阅读《Struts2权威指南》,开发者不仅可以掌握Struts2框架的使用,还能深入理解...
10. **实战项目**:通过一个实际的小型项目,展示如何从零开始搭建一个基于Struts2 3.0的应用,涵盖了上述所有知识点的综合运用。 通过阅读“轻松入门之Struts2 3.0版”,开发者不仅能掌握Struts2的基本用法,还能...
使用Struts2和jQuery EasyUI实现简单CRUD系统,从零开始,从基础的ajax与Struts2的交互开始。