When should I use a bean vs. a custom action?

In a complex JSP/Servlet application, would you use both JavaBeans and custom actions or one or the other? It seems like their functionality overlaps quite a bit.
Answer:
Yes, it does and there’s no clear cut answer for when one component type is the “right” choice. Often you end up using both types.I touch on this in the book in a couple of places. In Chapter 8, I say:

“As is often the case in software development, it’s hard to say exactly whether a bean or a custom action is the preferred component type. My rule of thumb is that a bean is a great carrier of information, and a custom action is great for processing information. Custom actions can use beans as input and output. For instance, an action can be used to save the properties of a bean in a database, or get information from a database and make it available to the page as a bean.”

An example of what I mean here is a bean with customer information properties and custom actions that process that information. You can use a <jsp:useBean> action to capture the input from a form, and custom actions to validate the captured data and to store it in a database:

<jsp:useBean id="custInfo" class="com.mycompany.CustomerInfoBean">
  <jsp:setProperty name="custInfo" property="*" />
</jsp:useBean>

<mytags:validateCustomerInfo name="custInfo"
  forwardOnInvalid="input.jsp"
/>
<mytags:storeCustomerInfo name="custInfo"
  nextPage="confirm.jsp"
/>

In Chapter 16 I say:

“Custom actions know about their environment. They automatically get access to all information about the request, the response, and all the variables in the JSP scopes. Another common use for a custom action is therefore as an HTTP-specific adapter to a bean. JavaBeans components are frequently used in a JSP application, and a bean is easier to reuse if it doesn’t know about the environment where it’s used.”

Hence, a bean that does something (such as the validation and storing above) can be wrapped in a custom action for use in a JSP page, and at the same time be used as is in a servlet or some other Java class. The counter bean and custom actions in Chapter 8 are examples of that. Instead of a bean, a custom action can of course wrap a regular utility class, such as the cookie and string utility classes used in the custom action examples in Chapter 16.

Leave a Reply

Your email address will not be published. Required fields are marked *