【转】创建JavaBean的几种方法

创建一个Bean的方法有很多种,并且在完成JavaBean的创建后,可以将Bean的实例保存在标准的JSP上下文范围(page、request、session和application)中。通常情况下,可以使用以下几种方法:

  • 在Action中使用Java代码来创建JavaBean。
  • 在JSP中使用Java脚本来创建JavaBean。
  • 使用标准的<jsp:useBean>标记来创建JavaBean。
  • 使用Struts的<bean:define>标记来创建JavaBean。
  • 使用其他Struts标记来创建JavaBean。

1.在Action中使用Java代码来创建JavaBean

因为JSP页面是要被编译为Servlet的,而Action类是被Struts的控制Servlet所调用的,所以在Action类中可以方便地将所创建的Bean对象的实例保存在标准的JSP上下文范围中。需要注意的是,在Action中创建的Bean只能保存在request、session和application范围中,而不能保存在page范围中。

(1)request范围

定义在request范围内的对象在整个用户请示的范围内有效,所有后续的Action类以及JSP页面都可以访问到该对象,它主要用来保存页面中需要使用到的相关对象。示例代码如下:

Customer customer = new Customer();

request.setAttribute("cust", customer);//属性名cust是JSP页面中访问这个customer的标识。

(2)session范围

保存在session范围内的对象在整个session有效的期间都可以被访问到,它主要用来保存与某个特定的登录用户相关的对象。示例代码如下:

User user = new User();

HttpSession session = request.getSession();

session.setAttribute("user", user);

(3)application范围

通常情况下,application范围内的Bean都是Servlet启动的时候在init()方法中初始化的。但也可以在Action中创建一个JavaBean,然后将其保存在application范围内。示例代码如下:

Foo foo = new Foo();

servlet.getServletContext().setAttribute("foo", foo);

2.在JSP中使用Java脚本创建JavaBean(不提倡)

(1)page范围

将Foo对象的实例foo保存到page范围内,并且命名为foo,代码如下:

<%

Foo foo = new Foo();

pageContext.setAttribute("foo", foo, PageContext.PAGE_SCOPE);

%>

其他三个范围类似,只需将PageContext.PAGE_SCOPE改为PageContext.REQUEST_SCOPE、PageContext.SESSION_SCOPE或PageContext.APPLICATION_SCOPE即可。

再次强调,在基于Struts的web应用中,不要将任何业务逻辑方法置于JSP页面中,而要将业务逻辑处理方法限制在Action类中。

3.使用标准的<jsp:useBean>标记创建JavaBean

<jsp:useBean>可以用来创建一个新的JavaBean,也可以定义一个新的引用指向已经存在的JavaBean。

当需要使用其他的标准JSP标记(如<jsp:getProperty>或<jsp:setProperty>)时,必须先使用<jsp:useBean>标记来创建JavaBean的实例或者引用已经存在的JavaBean的实例。

4.使用Struts的<bean:define>标记来创建JavaBean

<bean:define>可以通过复制其他JavaBean或者JavaBean的属性来在任意的上下文范围内创建新的JavaBean。

(1)定义一个String常量

<bean:define id="foo" value="This is a new String"/>

<bean:define id="bar" value='<%="hello, "+user.getName() %>'/>

(2)复制一个已经存在的JavaBean

创建一个新的JavaBean的引用及创建一个新的JavaBean的方法如下:

<bean:define id="foo" name="bar"/>

<bean:define id="baz" name="bop" type="com.mycompany.MyBopClass"/>

(3)复制一个已经存在的JavaBean的属性

使用一个已经存在的JavaBean来创建一个新的属性的引用,可使用类似下面的方式:

<bean:define id="foo" name="bar" property="baz" scope="request" toScope="session"/>

<bean:define id="bop" name="user" property="role[3].name"/>

注意,如果没有指定toScope属性,那么创建的JavaBean都是被绑定在page上下文范围内的。

5.其他Struts复制标记(请参考相关文档)

猜你喜欢

转载自bigdragon.iteye.com/blog/1748986
今日推荐