struts 的action与jSP

1.Action的属性传输


2通过ActionContext传输,ActionContext.getContext().put()后,

1. 1 从ActionContext,用“#”+属性名

  <!-- 从ActionContext中取name的值 -->

    name: <s:property value="#name"/> <br/>

   1.2.从Action,直接属性名

    <!-- 先看Action中有没有name属性,如果没有,则到ActionContext中找name的值 -->

    name: <s:property value="name"/> <br/>



3.通过request/session等传输


在Action中通过request/session来传值:

    public String detail(){

      

       //通过request

       ServletActionContext.getRequest().setAttribute("sex", "男");

      

       //通过session

       ServletActionContext.getRequest().getSession().setAttribute("address", "北京");

      

       //通过session

       ActionContext.getContext().getSession().put("postcode", "1234567");

      

       return "detail";

    }

在JSP中取值:

 

  <body>

   

    <!-- 从request中取sex值 -->

    request.sex = <s:property value="#request.sex"/> <br/>

    request.sex = <s:property value="#request['sex']"/> <br/>

   

    <!-- 从session中取值 -->

    session.address = <s:property value="#session.address"/> <br/>

    session.postcode = <s:property value="#session.postcode"/> <br/>

   

    <!-- 依次搜索page/request/session/application scope取值 -->

    attr.postcode=<s:property value="#attr.postcode"/> <br/>

  </body>


4.传递复杂对象及集合对象


如果在Action中传递一个复杂的对象到JSP,在JSP中,通过OGNL表达式,可以用句点“.”来访问对象中的属性。

如果传递一个集合对象到JSP,在JSP中可以通过<s:iterator>标签来访问集合中的数据。

 

Action中的代码:

       //传递复杂对象

       User u = new User();

       u.setUsername("admin");

       Group g = new Group();

       g.setName("管理员组");

       u.setGroup(g);

       ActionContext.getContext().put("user", u);

      

       //列表数据

       List list = new ArrayList();

       for(int i=0; i<10; i++){

           User user = new User();

           user.setUsername("User"+i);

           user.setAge(10+i);

           list.add(user);

       }

       ActionContext.getContext().put("users", list);

 

JSP中的代码:

    <!-- 通过句点访问对象的属性值 -->

    user.username=<s:property value="#user.username"/> <br/>

    user.group.name=<s:property value="#user.group.name"/> <br/>

   

    users: <br/>

    <s:iterator value="#users">

       <!-- 这个访问的是当前循环的user对象中的username属性 -->

       username:<s:property value="username"/>,<s:property value="age"/> <br/>

    </s:iterator>

   

    <!-- 这个访问的是Action对象中的username属性 -->

    username:<s:property value="username"/> <br/>

5.利用OGNL表达式访问静态方法、普通的实例方法及Action对象中的方法

 

假设有一个工具类,如下所示:

package cn.com.leadfar.utils;

 

public class Utils {

    public static String toUpperCase(String str){

       return str.toUpperCase();

    }

   

    public String toLowerCase(String str){

       return str.toLowerCase();

    }

}

 

 

Action类的定义如下:

public class UserAction {

    private String username;

    //查看用户的详细信息

    public String detail(){

       ……………………

       return "detail";

    }

   

    //这个方法可以在JSP中用OGNL表达式直接调用!

    public Utils getUtils(){

       return new Utils();

    }

 

 

则在JSP中可以直接通过OGNL表达式来访问这些方法:

<!-- 调用静态方法 -->

<s:property value="@cn.com.leadfar.utils.Utils@toUpperCase(username)"/>

 

<!-- 利用OGNL表达式创建Utils对象,并调用它的实例方法 -->

<s:property value="new cn.com.leadfar.utils.Utils().toLowerCase(username)"/>

 

<!-- 调用Action对象的getUtils().toLowerCase()方法 -->

<s:property value="utils.toLowerCase(username)"/>



6.如何在iterator循环体内访问外部的同名属性?

 

请看下述代码:

package cn.com.leadfar.struts2.actions;

 

public class User {

    private String username;

    public String getUsername() {

       return username;

    }

    public void setUsername(String username) {

       this.username = username;

    }

   

}

 

 

public class UserAction {

    private String username;

 

    //查看用户的详细信息

    public String detail(){

      

       username = "张三";

      

      

       //列表数据

       List list = new ArrayList();

       for(int i=0; i<10; i++){

           User user = new User();

           user.setUsername("User"+i);

           list.add(user);

       }

       ActionContext.getContext().put("users", list);

      

       return "detail";

    }

 

在JSP中通过<s:iterator>访问列表数据:

    <s:iterator value="#users">

       <!-- 这个访问的是当前循环的user对象中的username属性 -->

<s:property value="username"/>

       <s:property value="#root[1].username"/> <br/>

    </s:iterator>

 

上面这个例子中,<s:property value=”username”>访问的是当前循环中的user对象的username属性,而<s:property value=”#root[1].username”/>访问的是UserAction对象中的username属性!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值