jakarta-taglibs-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Martin Cooper" <mart...@apache.org>
Subject Re: Convert scoped attributes to scripting variables?
Date Tue, 14 Mar 2006 19:45:07 GMT
On 3/14/06, Richard Bondi <rbondi@gmail.com> wrote:
>
> Dear All,
>
> This email has a summary, background, and code.
>
> Summary:
> ***********
> 1. How can I turn a scoped attribute (defined in a c:set or c:if tag) into
> a
> scripting variable? I need to pass it into a tiles:put tag.


A scoped attribute is just a plain old attribute, as in
request.getAttribute("foo"),
in one of page, request, session or application scope. That's all; nothing
magical. The default for <c:set> is page scope, which is why the values
aren't visible on other pages.

2. Where is there a definition of "scoped attribute"?


Um, in the spec, as you might expect...

--
Martin Cooper


Background
> **************
> Java limits the size of bytecode bytes in a try{} to 64K. I have a page
> with
> a huge form that keeps growing beyond that. It's five years old, and too
> complicated for me to understand given my deadline (using
> spring/hibernate/struts/ajax/i8n/spaghetti code), so I just need to break
> out chunks of it into either servlet methods and/or separate servlets.
> Furthermore, everything is inside a large logic:iterate loop liberally
> sprinkled with c: and c-rt: tags.
>
> My plan is to move chunks into tiles using code like this:
>
> <tiles:insert page="tile1.jsp">
>   <tiles:put name="somebean" beanName="somebean" beanScope="page"/>
>   <tiles:put name="somebean" beanName="somebean" beanScope="page"/>
>   ...
> </tiles>
>
> (tile1.jsp contains a tiles:useAttribute tag that plucks the named bean
> out
> of the context specified in beanScope.)
>
> This works just fine for old tags like logic:iterate.
>
> For c: tags, it fails. There are plenty of variables defined with c:if
> that
> I need to pass to the tile.
>
> But I can't: because those variables are "scoped attributes". As best I
> can
> tell, a scoped attribute is (1) a name/value pair that c: tags can pass
> along to each other as long as they use them in their attributes, (2) that
> cannot be accessed from scripting variables, and (3) are not kept in the
> same context objects that Beans are, so eg pageContext.findAttributes()
> can'
> get at them.
>
> Code:
> ******
> Take the struts-blank webapp that comes with struts, and add the relevant
> tags. Then use these jsps and class:
>
> Wecome.jsp:
> <%@ page import=" aspen.Pebble" %>
> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
> <%@ taglib prefix="c-rt" uri=" http://java.sun.com/jstl/core_rt" %>
> <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
> <%@ taglib prefix="fmt" uri=" http://java.sun.com/jsp/jstl/fmt" %>
> <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql " %>
> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
> <%@ page import="java.util.ArrayList" %>
> <%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
> <%@ taglib uri=" http://jakarta.apache.org/struts/tags-bean" prefix="bean"
> %>
> <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"
> %>
>
> <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic"
> prefix="logic"
> %>
>
> <html:html locale="true">
>   <head>
>     <title><bean:message key="welcome.title"/></title>
>     <html:base/>
>   </head>
>
>   <body bgcolor="white">
>
>   <%
>     ArrayList pebbles = new ArrayList();
>     pebbles.add( new Pebble( "one" ) );
>     pebbles.add( new Pebble( "two" ) );
>     pebbles.add( new Pebble( "three" ) );
>
>   %>
>
>     <logic:iterate id="pebble" collection="<%=pebbles%>" type="
> aspen.Pebble
> ">
>
>     <%--<bean:define id="pebble" name="pebble" type="aspen.Pebble"/>--%>
>     <tiles:insert page="tile.jsp" flush="false">
>       <tiles:put name="pebble" beanName="pebble" beanScope="page"/>
>     </tiles:insert>
>     <li>From jsp: <%=pebble%></li>
>
>   </logic:iterate>
>
>   </body>
> </html:html>
>
> tile.jsp:
> ********
> <%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>
> <tiles:useAttribute name="pebble" classname="aspen.Pebble"/>
> <h1>I came from a tile: <%=pebble%></h1>
>
> Pebble class:
> ***************
> package aspen;
>
> import java.io.Serializable;
>
> public class Pebble implements Serializable {
>   private String owner = "";
>
>   public Pebble( String owner ) {
>     this.owner = owner;
>   }
>
>   public String getOwner() {
>     return owner;
>   }
>
>   public void setOwner( String owner ) {
>     this.owner = owner;
>   }
>
>   public String toString() {
>     return owner;
>   }
> }
>
> Thanks much,
> /r:b:
>
> --
> ************************************************
> Richard Bondi
> 33 Royal Ave #3
> Cambridge, MA 02138-1301
> Email: rbondi at gmail.com
> Phone: (617) 938-9562
> ************************************************
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message