}
public void redraw(Writer out)
throws IOException {
String ctl;
final Execution exec = getExecution();
final boolean au = exec.isAsyncUpdate(null);
if (!au && !exec.isIncluded()
&& ((ctl=ExecutionsCtrl.getPageRedrawControl(exec)) == null
|| "desktop".equals(ctl))) {
if (!au && shallIE7Compatible())
try {
if (exec.isBrowser("ie8")
&& !exec.containsResponseHeader("X-UA-Compatible"))
exec.setResponseHeader("X-UA-Compatible", "IE=EmulateIE7");
} catch (Throwable ex) { //ignore (it might not be allowed)
}
//FUTURE: Consider if config.isKeepDesktopAcrossVisits() implies cacheable
//Why yes: the client doesn't need to ask the server for updated content
//Why no: browsers seems fail to handle DHTML correctly (when BACK to
//a DHTML page), so it is better to let the server handle cache, if any
final boolean cacheable =
_cacheable != null ? _cacheable.booleanValue():
_desktop.getDevice().isCacheable();
if (!cacheable) {
//Bug 1520444
exec.setResponseHeader("Pragma", "no-cache");
exec.addResponseHeader("Cache-Control", "no-cache");
exec.addResponseHeader("Cache-Control", "no-store");
//exec.addResponseHeader("Cache-Control", "private");
//exec.addResponseHeader("Cache-Control", "max-age=0");
//exec.addResponseHeader("Cache-Control", "s-maxage=0");
//exec.addResponseHeader("Cache-Control", "must-revalidate");
//exec.addResponseHeader("Cache-Control", "proxy-revalidate");
//exec.addResponseHeader("Cache-Control", "post-check=0");
//exec.addResponseHeader("Cache-Control", "pre-check=0");
exec.setResponseHeader("Expires", "-1");
exec.setAttribute(Attributes.NO_CACHE, Boolean.TRUE);
//so HtmlPageRenderers.outLangJavaScripts generates JS's keepDesktop correctly
}
if (_hdres != null)
for (Iterator it = _hdres.iterator(); it.hasNext();) {
final Object[] vals = (Object[])it.next();
final String nm = (String)vals[0];
final Object val = vals[1];
final boolean add = ((Boolean)vals[2]).booleanValue();
if (val instanceof Date) {
if (add) exec.addResponseHeader(nm, (Date)val);
else exec.setResponseHeader(nm, (Date)val);
} else {
if (add) exec.addResponseHeader(nm, (String)val);
else exec.setResponseHeader(nm, (String)val);
}
}
}
final PageRenderer renderer = (PageRenderer)
exec.getAttribute(Attributes.PAGE_RENDERER);
final Object oldrendering =
exec.setAttribute(Attributes.PAGE_RENDERING, Boolean.TRUE);
try {
(renderer != null ? renderer: _langdef.getPageRenderer())
.render(this, out);
} finally {
if (oldrendering != null)
exec.setAttribute(Attributes.PAGE_RENDERING, oldrendering);
else
exec.removeAttribute(Attributes.PAGE_RENDERING);
}
}