В следующий раз вы можете сделать следующее:
Создать Java-класс "JavaScriptDebugBindingFactory"
package ch.hasselba.xpages;
import com.ibm.xsp.binding.BindingFactory;
import com.ibm.xsp.util.ValueBindingUtil;
import javax.faces.application.Application;
import javax.faces.el.MethodBinding;
import javax.faces.el.ValueBinding;
public class JavaScriptDebugBindingFactory implements BindingFactory {
public static final String JAVASCRIPT = "javascript";
public String getPrefix() {
return "javascript";
}
public MethodBinding createMethodBinding(Application app, String str,
Class[] arr) {
String tmpStr = ValueBindingUtil.parseSimpleExpression(str);
return new JavaScriptDebugMethodBinding(tmpStr, arr);
}
public ValueBinding createValueBinding(Application app, String str) {
String tmpSttr = ValueBindingUtil.parseSimpleExpression(str);
return new JavaScriptDebugValueBinding(tmpStr);
}
}
Добавить класс MethodBinding
package ch.hasselba.xpages;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.el.EvaluationException;
import javax.faces.el.MethodNotFoundException;
import com.ibm.xsp.binding.javascript.JavaScriptMethodBinding;
import com.ibm.xsp.exception.EvaluationExceptionEx;
public class JavaScriptDebugMethodBinding extends JavaScriptMethodBinding {
public JavaScriptDebugMethodBinding() {
super(null, null);
}
public JavaScriptDebugMethodBinding(String str,
Class[] arr) {
super(str, arr);
}
public Object invoke(FacesContext fc, Object[] obj)
throws EvaluationException, MethodNotFoundException {
UIComponent cmp = getComponent();
try {
return super.invoke(fc, obj);
} catch (EvaluationExceptionEx e) {
System.out.println("COMPONENT: " + cmp.getId());
throw e;
}
}
}
Добавить класс JavaScriptDebugValueBinding
package ch.hasselba.xpages;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.el.EvaluationException;
import javax.faces.el.PropertyNotFoundException;
import com.ibm.xsp.binding.javascript.JavaScriptValueBinding;
import com.ibm.xsp.exception.EvaluationExceptionEx;
public class JavaScriptDebugValueBinding extends JavaScriptValueBinding {
public JavaScriptDebugValueBinding() {
super();
}
public JavaScriptDebugValueBinding(String str) {
super(str);
}
public Object getValue(FacesContext fc) throws EvaluationException,
PropertyNotFoundException {
UIComponent cmp = getComponent();
try {
return super.getValue(fc);
} catch (EvaluationExceptionEx e) {
System.out.println("COMPONENT: " + cmp.getId());
throw e;
}
}
}
Перезаписать обработчик JavaScript в beforePageLoad
<xp:this.beforePageLoad>
<![CDATA[#{javascript:
importPackage( ch.hasselba.xpages );
var facts = facesContext.getApplication().getFactoryLookup();
facts.setFactory("javascript", new ch.hasselba.xpages.JavaScriptDebugBindingFactory())
}]]>
</xp:this.beforePageLoad>
Когдаoocurs error, идентификатор компонента выводится на консоль сервера.