如果有这么一个bean:public class UserInfo{
private String username;
private String password;
public void setUsername(String username){this.username=username;}
public void setPassword(String password){this.password=password;}
public String getUsername(){return username;}
public String password(){return password;}
}那么,想在JSP页面中取得取得这个bean的值很容易,只需要把一个UserInfo的实例放入request中
如request.setAttribute("userInfo",userInfo)
然后直接在JSP页面中用${userInfo.username}和${userInfo.password}就可以了。但是我现在的问题是如果这个bean是类似于:public class UserInfo{
private String username;
private String password;
private DataObject data;
public void setUsername(String username){this.username=username;}
public void setPassword(String password){this.password=password;}
public void setData(DataObject data){this.data=data;}
public String getUsername(){return username;}
public String getPassword(){return password;}
public String getData(){return data;}
}而上面这个DataObject类型的对象中有两个值我需要取出来,分别是age和sex
DataObject向外提供了一个get方法
也就是说你要取age就用:data.get("age);
要取sex就用:data.get("sex");
现在我想要在JSP页面中将age和sex用EL表达式显示出来,向本论坛的各位大侠请教 EL能不能实现这个功能?
我知道在JSP中用<%%>然后在里面写代码很容易实现这个功能,但是在我的项目中字段非常多,我想用EL这种简洁的形式表达出来。上面这个bean是我为了表达清楚而写的,实际的项目比这个麻烦十倍。

解决方案 »

  1.   

    public class DataObject{
        private String age;
        private String sex;
        public void setage(String age){
                    this.age=age;
          }
        public void setsex(String sex){
                    this.sex=sex;
          }
        public String getage(){
             return this.age;
          }
        public String getsex(){
             return this.sex;
          }}
    UserInfo里面已经有了DataObject data了,然后request.setAttribute("userInfo",userInfo),页面上就${userinfo.data.sex} 与${userinfo.data.age}
      

  2.   

    EL表达式不懂
    但可以如下这样做啊:1.在action中得到bean中的data
    2.在action中:
     request.setAttribute("data", data);
    3.在jsp中:
     <bean:write name="data" property="age"/>
     <bean:write name="data" property="sex"/>//这样就可以把对象中的属性取到了
      

  3.   

    其实是可以的:<%
      Map dateObject = new HashMap();
      dateObject.put("name","yang");
      dateObject.put("password","111111");
      request.setAttribute("dateObject",dateObject);
    %>你可以这样在页面中取:
    name:${dateObject.name}
    password:${dateObject.password}
      

  4.   

    一样的事么.
    DataObject有属性age和sex,
    只要有对应的getAge和getSex,
    那么在取值的时候无非就是多取一次而已了.
    把userInfo写到request后,先取得DataObject的值,
    然后再取age和sex的.
    等下给你找个例子.
      

  5.   

    算了,直接写吧.
    request.setAttribute("userinfo",userinfo);然后页面
    <c:set var="userinfo" value="${requestScope.userinfo}"/>
    username:${userinfo.username}
    password:${userinfo.password}
    <c:set var="dataObject" value="${userinfo.dataObject}"/>
    age:${dataObject.age}
    sex:${dataObject.sex}不知道这样对不,<bean>标签不怎么用,不熟悉,:)
      

  6.   

    存取器
    因为 EL 标识符是作为隐式对象或限制了作用域的变量(通过属性来实现)解析的,因此有必要将它们转换成 Java 对象。EL 可以自动包装和解包其相应的 Java 类中的基本类型(例如,可以在后台将 int 强制转换成 Integer 类,反之亦可),但大多数的标识符将成为指向完整的 Java 对象的指针。结果是,对这些对象的特性或(在对象是数组和集合的情况下)对其元素的访问通常是令人满意的。就为了实现这种用途,EL 提供了两种不同的存取器(点运算符(.)和方括号运算符([])),也支持通过 EL 操作特性和元素。点运算符通常用于访问对象的特性。例如,在表达式 ${user.firstName} 中,使用点运算符来访问user 标识符所引用对象的名为 firstName 的特性。EL 使用 Java bean 约定访问对象特性,因此必须定义这个特性的 getter 方法(通常是名为  getFirstName() 的方法),以便表达式正确求值。当被访问的特性本身是对象时,可以递归地应用点运算符。例如,如果我们虚构的  user 对象有一个实现为 Java 对象的 address 特性,那么也可以用点运算符来访问这个对象的特性。例如,表达式 $ {user.address.city} 将会返回这个地址对象嵌套的 city 特性。 
    所以,就你说的问题,在JSP页面中用${userInfo.data.age}和${userInfo.data.sex}是可以的.