Pages

Monday, November 7, 2011

Saving Data Using JSTL in a JSP Page

When a JSP page needs to save data for its processing, it must specify a location, called the scope. See Saving Data in a JSP Page for an explanation of the four available scopes.
Data is saved using a mechanism called scoped variables. A scoped variable has a name, which is of type Stringand a value, which is of type Object. For non-page scoped variables, it is recommended that the name use the reverse domain name convention (e.g., prefixed with com_mycompany) to minimize unexpected collisions when integrating with third party modules.
When using the JSTL's expression language (see Enabling the JSTL Expression Language in a JSP Page), the variables in each scope are made available in the implicit objects pageScoperequestScopesessionScope, andapplicationScope.
This example saves and retrieves values in scoped variables in each of the four scopes:
<%-- Declare the core library --%>
<%@ taglib uri="/WEB-INF/tld/c.tld" prefix="c" %>

<%-- Save data in scoped variables --%>
<c:set var="name1" value="value1" scope="page" />
<c:set var="com_mycompany_name2" value="value2" scope="request" />
<c:set var="com_mycompany_name3" value="value3" scope="session" />
<c:set var="com_mycompany_name4" value="value4" scope="application" />

<%-- Show the saved values --%>
<c:out value='${pageScope.name1}' />
<c:out value='${requestScope.com_mycompany_name2}' />
<c:out value='${sessionScope.com_mycompany_name3}' />
<c:out value='${applicationScope.com_mycompany_name4}' />
When retrieving a saved value, it is possible to omit the scope. If the scope is omitted, the variable name is automatically searched for in each of the scopes, in the order pageScoperequestScopesessionScope, andapplicationScope.
<%-- Show the saved values without a specific scope --%>
<c:out value='${name1}' />
<c:out value='${com_mycompany_name2}' />
<c:out value='${com_mycompany_name3}' />
<c:out value='${com_mycompany_name4}' />
It is also possible to specify the value to save using the contents of the body, rather than through the value attribute:
<%-- Save data using body content --%>
<c:set var="name1" scope="page">
    value 1 in body
</c:set>
<c:set var="com_mycompany_name2" scope="request" >
    value 2 in body
</c:set>
<c:set var="com_mycompany_name3" scope="session" >
    value 3 in body
</c:set>
<c:set var="com_mycompany_name4" scope="application">
    value 4 in body
</c:set>
When specifying the value using body contents, the body contents is first trimmed of leading and trailing white space before it is saved. For example,
<c:set var="name1" scope="page">
    line 1
    line 2
</c:set>
would be saved as:
"line 1\n    line 2"

No comments:

Post a Comment