我希望你正在觀察的只是EL和VDL所需的行爲。
也就是說,通過引入您自己的解析器代碼,您可以記錄一些有限但潛在有用的信息。
的VariableResolver解決頂層工件:
package logs;
import java.util.logging.*;
import javax.faces.context.FacesContext;
import javax.faces.el.*;
@SuppressWarnings("deprecated")
public class LogVariableResolver extends VariableResolver {
private static final Logger LOG =
Logger.getLogger(LogVariableResolver.class.getName());
private final VariableResolver decorated;
public LogVariableResolver(VariableResolver decorated) {
this.decorated = decorated;
}
@Override
public Object resolveVariable(FacesContext context, String name)
throws EvaluationException {
Object resolved = decorated.resolveVariable(context, name);
if (resolved == null && LOG.isLoggable(Level.WARNING)) {
LOG.warning("Unresolved: " + name);
} else {
LOG.info("Resolved: " + name + " " + resolved);
}
return resolved;
}
}
的PropertyResolver解析上的對象的屬性:
package logs;
import java.util.logging.*;
import javax.faces.el.*;
@SuppressWarnings("deprecated")
public class LogPropertyResolver extends PropertyResolver {
private static final Logger LOG =
Logger.getLogger(LogPropertyResolver.class.getName());
private final PropertyResolver decorated;
public LogPropertyResolver(PropertyResolver pr) {
this.decorated = pr;
}
@Override
public Object getValue(Object base, Object property)
throws EvaluationException, PropertyNotFoundException {
return log(decorated.getValue(base, property), base, property);
}
@Override
public Object getValue(Object base, int index)
throws EvaluationException, PropertyNotFoundException {
return log(decorated.getValue(base, index), base, index);
}
private Object log(Object result, Object base, Object prop) {
if (result == null && LOG.isLoggable(Level.WARNING)) {
LOG.warning("Result null for property " + prop + " on " + base);
}
return result;
}
// implement remaining methods to call delegate & return values
解析器可以在faces-config.xml中登記:
<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="2.2"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">
<application>
<variable-resolver>logs.LogVariableResolver</variable-resolver>
<property-resolver>logs.LogPropertyResolver</property-resolver>
</application>
<!-- etc -->
這些類型已被棄用,但使用它們比配置ELContext更容易。
由於您想調試EL表達式,因此這與JSF沒有直接關係,我認爲您應該查看EL實現的文檔,這取決於運行應用程序的服務器。 – LaurentG