The <bean:define>
tag differs from <jsp:useBean>
in several ways, including:
- Unconditionally creates (or replaces) a bean under the specified identifier.
- Can create a bean with the value returned by a property getter of a different bean (including properties referenced with a nested and/or indexed property name).
- Can create a bean whose contents is a literal string (or the result of a runtime expression) specified by the
value
attribute. - Does not support nested content (such as
<jsp:setProperty>
tags) that are only executed if a bean was actually created.
If you use another tag to create the body content (e.g. bean:write), that tag must return a non-empty String. An empty String equates to an empty body or a null String, and a new scripting variable cannot be defined as null. Your bean must return a non-empty String, or the define tag must be wrapped within a logic tag to test for an empty or null value.