struts2从零开始(六)

知识点: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;


}

}



源码下载请点这里:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值