* Complain about missing handler in default failmode.
* Streamline a bit by passing ScriptingEngine instead of RequestEvaluator in some cases.
This commit is contained in:
parent
731ec80ac1
commit
0dbf6751b7
1 changed files with 17 additions and 13 deletions
|
@ -20,6 +20,7 @@ import helma.framework.*;
|
||||||
import helma.framework.repository.Resource;
|
import helma.framework.repository.Resource;
|
||||||
import helma.objectmodel.ConcurrencyException;
|
import helma.objectmodel.ConcurrencyException;
|
||||||
import helma.util.*;
|
import helma.util.*;
|
||||||
|
import helma.scripting.ScriptingEngine;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
|
@ -614,10 +615,11 @@ public final class Skin {
|
||||||
|
|
||||||
Object handlerObject = null;
|
Object handlerObject = null;
|
||||||
Object value = null;
|
Object value = null;
|
||||||
|
ScriptingEngine engine = reval.scriptingEngine;
|
||||||
|
|
||||||
if (handler != HANDLER_GLOBAL) {
|
if (handler != HANDLER_GLOBAL) {
|
||||||
handlerObject = resolveHandler(thisObject, reval, handlerCache);
|
handlerObject = resolveHandler(thisObject, reval, handlerCache);
|
||||||
handlerObject = resolvePath(handlerObject, reval);
|
handlerObject = resolvePath(handlerObject, engine);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (handler == HANDLER_GLOBAL || handlerObject != null) {
|
if (handler == HANDLER_GLOBAL || handlerObject != null) {
|
||||||
|
@ -627,7 +629,7 @@ public final class Skin {
|
||||||
String propName = path[path.length - 1];
|
String propName = path[path.length - 1];
|
||||||
String funcName = propName + "_macro";
|
String funcName = propName + "_macro";
|
||||||
|
|
||||||
if (reval.scriptingEngine.hasFunction(handlerObject, funcName)) {
|
if (engine.hasFunction(handlerObject, funcName)) {
|
||||||
StringBuffer buffer = reval.getResponse().getBuffer();
|
StringBuffer buffer = reval.getResponse().getBuffer();
|
||||||
// remember length of response buffer before calling macro
|
// remember length of response buffer before calling macro
|
||||||
int bufLength = buffer.length();
|
int bufLength = buffer.length();
|
||||||
|
@ -665,21 +667,21 @@ public final class Skin {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// display error message unless silent failmode is on
|
// display error message unless silent failmode is on
|
||||||
if ((handlerObject == null || !reval.scriptingEngine.hasProperty(handlerObject, propName)) &&
|
if ((handlerObject == null || !engine.hasProperty(handlerObject, propName))
|
||||||
standardParams.verboseFailmode(handlerObject, reval)) {
|
&& standardParams.verboseFailmode(handlerObject, engine)) {
|
||||||
throw new MacroUnhandledException(name);
|
throw new MacroUnhandledException(name);
|
||||||
}
|
}
|
||||||
value = reval.scriptingEngine.getProperty(handlerObject, propName);
|
value = engine.getProperty(handlerObject, propName);
|
||||||
return filter(reval, value, thisObject, handlerCache);
|
return filter(reval, value, thisObject, handlerCache);
|
||||||
}
|
}
|
||||||
} else if (standardParams.verboseFailmode(handlerObject, reval)) {
|
} else if (standardParams.verboseFailmode(handlerObject, engine)) {
|
||||||
throw new MacroUnhandledException(name);
|
throw new MacroUnhandledException(name);
|
||||||
}
|
}
|
||||||
return filter(reval, null, thisObject, handlerCache);
|
return filter(reval, null, thisObject, handlerCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Render the macro given a handler object
|
* Render the macro given a handler object.
|
||||||
*/
|
*/
|
||||||
public void render(RequestEvaluator reval, Object thisObject, Map handlerCache)
|
public void render(RequestEvaluator reval, Object thisObject, Map handlerCache)
|
||||||
throws RedirectException, UnsupportedEncodingException {
|
throws RedirectException, UnsupportedEncodingException {
|
||||||
|
@ -763,7 +765,7 @@ public final class Skin {
|
||||||
|
|
||||||
if (handler != HANDLER_GLOBAL) {
|
if (handler != HANDLER_GLOBAL) {
|
||||||
handlerObject = resolveHandler(thisObject, reval, handlerCache);
|
handlerObject = resolveHandler(thisObject, reval, handlerCache);
|
||||||
handlerObject = resolvePath(handlerObject, reval);
|
handlerObject = resolvePath(handlerObject, reval.scriptingEngine);
|
||||||
}
|
}
|
||||||
|
|
||||||
String funcName = path[path.length - 1] + "_filter";
|
String funcName = path[path.length - 1] + "_filter";
|
||||||
|
@ -871,13 +873,13 @@ public final class Skin {
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object resolvePath(Object handler, RequestEvaluator reval) {
|
private Object resolvePath(Object handler, ScriptingEngine engine) {
|
||||||
if (path.length > 2 && !app.allowDeepMacros) {
|
if (path.length > 2 && !app.allowDeepMacros) {
|
||||||
throw new RuntimeException("allowDeepMacros property must be true " +
|
throw new RuntimeException("allowDeepMacros property must be true " +
|
||||||
"in order to enable deep macro paths.");
|
"in order to enable deep macro paths.");
|
||||||
}
|
}
|
||||||
for (int i = 1; i < path.length - 1; i++) {
|
for (int i = 1; i < path.length - 1; i++) {
|
||||||
handler = reval.scriptingEngine.getProperty(handler, path[i]);
|
handler = engine.getProperty(handler, path[i]);
|
||||||
if (handler == null) {
|
if (handler == null) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -995,9 +997,11 @@ public final class Skin {
|
||||||
app.logEvent("unrecognized failmode value: " + value);
|
app.logEvent("unrecognized failmode value: " + value);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean verboseFailmode(Object handler, RequestEvaluator reval) {
|
boolean verboseFailmode(Object handler, ScriptingEngine engine) {
|
||||||
return (failmode == FAIL_VERBOSE) ||
|
return (failmode == FAIL_VERBOSE) ||
|
||||||
(failmode == FAIL_DEFAULT && reval.scriptingEngine.isTypedObject(handler));
|
(failmode == FAIL_DEFAULT &&
|
||||||
|
(handler == null ||
|
||||||
|
engine.isTypedObject(handler)));
|
||||||
}
|
}
|
||||||
|
|
||||||
StandardParams render(RequestEvaluator reval, Object thisObj, Map handlerCache)
|
StandardParams render(RequestEvaluator reval, Object thisObj, Map handlerCache)
|
||||||
|
|
Loading…
Add table
Reference in a new issue