Update of /var/cvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib/util
In directory james.mmbase.org:/tmp/cvs-serv11743
Modified Files:
BasicBacking.java ContextContainer.java
PageContextBacking.java PageContextContainer.java
Log Message:
more fixes related to MMB-1730
See also:
http://cvs.mmbase.org/viewcvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib/util
See also: http://www.mmbase.org/jira/browse/MMB-1730
Index: BasicBacking.java
===================================================================
RCS file:
/var/cvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib/util/BasicBacking.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- BasicBacking.java 16 May 2007 23:24:49 -0000 1.12
+++ BasicBacking.java 7 Oct 2008 17:28:25 -0000 1.13
@@ -28,7 +28,7 @@
* @author Michiel Meeuwissen
* @since MMBase-1.8
- * @version $Id: BasicBacking.java,v 1.12 2007/05/16 23:24:49 michiel Exp $
+ * @version $Id: BasicBacking.java,v 1.13 2008/10/07 17:28:25 michiel Exp $
*/
public class BasicBacking extends AbstractMap<String, Object> implements
Backing {
@@ -45,15 +45,14 @@
private final Map<String, Object> b = new HashMap<String, Object>(); //
the actual backing.
private final boolean isELIgnored;
- private PageContext pageContext;
+ private transient PageContext pageContext;
/**
* @param pc The page-context to which variables must be reflected or
<code>null</code> if this must not happen.
*/
public BasicBacking(PageContext pc, boolean ignoreEL) {
pageContext = pc;
- assert pc != null;
- isELIgnored = ignoreEL ||
"true".equals(pc.getServletContext().getInitParameter(ContextTag.ISELIGNORED_PARAM));
+ isELIgnored = ignoreEL || pageContext == null ||
"true".equals(pc.getServletContext().getInitParameter(ContextTag.ISELIGNORED_PARAM));
if (log.isDebugEnabled()) {
log.debug("Pushing page Context " + pc + " --> " + isELIgnored);
}
@@ -74,8 +73,7 @@
}
public void pushPageContext(PageContext pc) {
-
- PageContext origPageContext = pageContext;
+ final PageContext origPageContext = pageContext;
pageContext = pc;
if (isELIgnored) return; // never mind
@@ -197,7 +195,7 @@
}
void release() {
- if (originalPageContextValues != null) {
+ if (originalPageContextValues != null && pageContext != null) {
//log.debug("Restoring pageContext with " +
originalPageContextValues);
// restore the pageContext
for (Map.Entry<String, Object> e :
originalPageContextValues.entrySet()) {
Index: ContextContainer.java
===================================================================
RCS file:
/var/cvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib/util/ContextContainer.java,v
retrieving revision 1.62
retrieving revision 1.63
diff -u -b -r1.62 -r1.63
--- ContextContainer.java 26 Jun 2008 10:28:29 -0000 1.62
+++ ContextContainer.java 7 Oct 2008 17:28:25 -0000 1.63
@@ -25,7 +25,7 @@
* there is searched for HashMaps in the HashMap.
*
* @author Michiel Meeuwissen
- * @version $Id: ContextContainer.java,v 1.62 2008/06/26 10:28:29 michiel Exp $
+ * @version $Id: ContextContainer.java,v 1.63 2008/10/07 17:28:25 michiel Exp $
**/
public abstract class ContextContainer extends AbstractMap<String, Object>
implements Map<String, Object> {
@@ -112,12 +112,12 @@
*
* @since MMBase-1.8
*/
- protected abstract Backing getBacking();
+ public abstract Backing getBacking();
public void release(PageContext pc, ContextContainer p) {
getBacking().pullPageContext(pc);
- // restore also the parent.xb
+ // restore also the parent.
parent = p;
}
@@ -239,11 +239,14 @@
* Like containsKey but doesn't check for dots.
*/
private boolean simpleContainsKey(String key, boolean checkParent) {
- boolean result = getBacking().containsKey(key);
- if (!result && checkParent && parent != null) {
- result = parent.simpleContainsKey(key, true);
+ if (getBacking().containsKey(key)) {
+ return true;
+ } else if (checkParent && parent != null) {
+ log.debug("Checking " + parent + " for " + key);
+ return parent.simpleContainsKey(key, true);
+ } else {
+ return false;
}
- return result;
}
/**
Index: PageContextBacking.java
===================================================================
RCS file:
/var/cvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib/util/PageContextBacking.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -b -r1.17 -r1.18
--- PageContextBacking.java 26 Jun 2008 10:30:13 -0000 1.17
+++ PageContextBacking.java 7 Oct 2008 17:28:25 -0000 1.18
@@ -26,7 +26,7 @@
* @author Michiel Meeuwissen
* @since MMBase-1.8
- * @version $Id: PageContextBacking.java,v 1.17 2008/06/26 10:30:13 michiel
Exp $
+ * @version $Id: PageContextBacking.java,v 1.18 2008/10/07 17:28:25 michiel
Exp $
*/
public class PageContextBacking extends AbstractMap<String, Object>
implements Backing {
@@ -35,7 +35,7 @@
private static final int SCOPE = PageContext.PAGE_SCOPE;
- private final PageContext pageContext;
+ private final transient PageContext pageContext;
// We also want to store null, pageContext cannot contain those.
private final Set<String> nulls = new HashSet<String>();
@@ -49,9 +49,11 @@
}
public void pushPageContext(PageContext pc) {
- assert pageContext == pc;
+ assert pageContext == null || pageContext == pc;
+ if (log.isDebugEnabled()) {
log.debug("Pushing " + pageContext + " --> " + pc);
}
+ }
public void pullPageContext(PageContext pc) {
@@ -159,10 +161,17 @@
}
}
public Object getOriginal(String key) {
+ if (key == null) return null; // pageContext cannot accept null keys
Object value = unwrapped.get(key);
if (value != null) return value;
- return pageContext.findAttribute(key);
+ if (pageContext.getRequest() == null) throw new
IllegalArgumentException("PageContext " + pageContext + " has no request");
+ try {
+ return pageContext.findAttribute((String) key);
+ } catch (Exception e) {
+ throw new RuntimeException(" for " + (key == null ? "NULL" :
(key.getClass() + ":" + key)) + " " + e.getMessage() , e);
}
+ }
+
public boolean containsKey(Object key) {
if (key instanceof String) {
return pageContext.findAttribute((String) key) != null ||
nulls.contains(key);
Index: PageContextContainer.java
===================================================================
RCS file:
/var/cvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib/util/PageContextContainer.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- PageContextContainer.java 10 Feb 2007 16:49:27 -0000 1.15
+++ PageContextContainer.java 7 Oct 2008 17:28:25 -0000 1.16
@@ -18,7 +18,7 @@
* The page context container stores variables directly in the page context,
like JSTL does.
*
* @author Michiel Meeuwissen
- * @version $Id: PageContextContainer.java,v 1.15 2007/02/10 16:49:27 nklasens
Exp $
+ * @version $Id: PageContextContainer.java,v 1.16 2008/10/07 17:28:25 michiel
Exp $
* @since MMBase-1.8
**/
@@ -46,7 +46,7 @@
backing.release();
}
- protected Backing getBacking() {
+ public PageContextBacking getBacking() {
return backing;
}
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs