gpt4 book ai didi

error-handling - 如何在XPages中的自定义控件中处理设计错误?

转载 作者:行者123 更新时间:2023-12-03 07:46:10 24 4
gpt4 key购买 nike

在自定义控件中,有一个重复控件,它引用文件夹中的一列(不是 View )。结合自定义控件,可以及时更改文件夹的默认设计。因此,可能发生的情况是,自定义控件的代码比文件夹的设计新,因此设计不匹配并且XPage错误消失了。

我特别想要的是自定义控件处理与缺少 View /文件夹列有关的错误或类似的设计错误。该错误将在某处报告,通知用户他/她可以激活某些可以修复这种情况的东西。

我知道如何捕获JavaScript错误,不幸的是所有列值都在表达式语言中。我当然可以重新编码,但是我想知道是否有更好的方法。

简而言之:如何捕获表达式语言错误?

最佳答案

您可以通过添加自己的EL和自己的VariableResolver来捕获PropertyResolver语言错误。为此,您必须创建两个Java类:

  • 变量解析器
    package ch.hasselba.xpages.demo;

    import javax.faces.application.FacesMessage;
    import javax.faces.context.FacesContext;
    import javax.faces.el.EvaluationException;
    import javax.faces.el.VariableResolver;

    public class ELErrVariableResolver extends VariableResolver {

    private final VariableResolver delegate;

    public ELErrVariableResolver(VariableResolver resolver) {
    delegate = resolver;
    }

    @Override
    public Object resolveVariable(FacesContext context, String name) throws EvaluationException {
    Object variable = null;
    try{
    variable = delegate.resolveVariable(context, name);
    }catch( EvaluationException ee ){
    addResolveErrMessage( context, name );
    }

    return variable;
    }

    public void addResolveErrMessage( FacesContext context , String name ){
    FacesMessage msg = new FacesMessage();
    msg.setSummary( "BAD EL! Variable '" + name + "' not found." );
    msg.setSeverity( FacesMessage.SEVERITY_FATAL );
    context.addMessage("BAD EL!", msg);
    }
    }
  • 属性解析器
    package ch.hasselba.xpages.demo;

    import javax.faces.application.FacesMessage;
    import javax.faces.context.FacesContext;
    import javax.faces.el.EvaluationException;
    import javax.faces.el.PropertyNotFoundException;
    import javax.faces.el.PropertyResolver;

    public class ELErrPropertyResolver extends PropertyResolver{

    private final PropertyResolver delegate;

    public ELErrPropertyResolver(PropertyResolver resolver) {
    delegate = resolver;
    }


    @Override
    public Class getType(Object paramObject1, Object paramObject2)
    throws EvaluationException, PropertyNotFoundException {
    Class c = null;
    try{
    c = delegate.getType(paramObject1, paramObject2);
    }catch(Exception e){
    addResolveErrMessage( FacesContext.getCurrentInstance(), paramObject1.toString() + "." + paramObject2.toString() );
    }
    return c;
    }

    @Override
    public Class getType(Object paramObject, int paramInt)
    throws EvaluationException, PropertyNotFoundException {
    Class c = null;
    try{
    c = delegate.getType(paramObject, paramInt);
    }catch(Exception e){
    addResolveErrMessage( FacesContext.getCurrentInstance(), paramObject.toString() + "." + paramInt );
    }
    return c;
    }

    @Override
    public Object getValue(Object paramObject1, Object paramObject2)
    throws EvaluationException, PropertyNotFoundException {
    Object c = null;

    try{
    c = delegate.getValue(paramObject1, paramObject2);
    }catch(Exception e){
    addResolveErrMessage( FacesContext.getCurrentInstance(), paramObject1.toString() + "." + paramObject2.toString() );
    }
    return c;
    }

    @Override
    public Object getValue(Object paramObject, int paramInt)
    throws EvaluationException, PropertyNotFoundException {
    Object c = null;
    try{
    c = delegate.getValue(paramObject, paramInt);
    }catch(Exception e){
    addResolveErrMessage( FacesContext.getCurrentInstance(), paramObject.toString() + "." + paramInt );
    }
    return c;
    }

    @Override
    public boolean isReadOnly(Object paramObject1, Object paramObject2)
    throws EvaluationException, PropertyNotFoundException {
    boolean c = false;
    try{
    c = delegate.isReadOnly(paramObject1, paramObject2);
    }catch(Exception e){
    addResolveErrMessage( FacesContext.getCurrentInstance(), paramObject1.toString() + "." + paramObject2.toString() );
    }
    return c;
    }

    @Override
    public boolean isReadOnly(Object paramObject, int paramInt)
    throws EvaluationException, PropertyNotFoundException {
    boolean c = false;
    try{
    c = delegate.isReadOnly(paramObject, paramInt);
    }catch(Exception e){
    addResolveErrMessage( FacesContext.getCurrentInstance(), paramObject.toString() + "." + paramInt );
    }
    return c;
    }

    @Override
    public void setValue(Object paramObject1, Object paramObject2,
    Object paramObject3) throws EvaluationException,
    PropertyNotFoundException {
    try{
    delegate.setValue(paramObject1, paramObject2, paramObject3);
    }catch(Exception e){
    addResolveErrMessage( FacesContext.getCurrentInstance(), paramObject1.toString() + "." + paramObject2.toString() );
    }

    }

    @Override
    public void setValue(Object paramObject1, int paramInt, Object paramObject2)
    throws EvaluationException, PropertyNotFoundException {

    try{
    delegate.setValue(paramObject1, paramInt, paramObject2);
    }catch(Exception e){
    addResolveErrMessage( FacesContext.getCurrentInstance(), paramObject1.toString() + "." + paramInt );
    }

    }

    public void addResolveErrMessage( FacesContext context , String name ){
    FacesMessage msg = new FacesMessage();
    msg.setSummary( "BAD EL! Property '" + name + "' not found." );
    msg.setSeverity( FacesMessage.SEVERITY_FATAL );
    context.addMessage("BAD EL!", msg);
    }
    }
  • 将新的解析器添加到您的faces-config.xml中:
    <?xml version="1.0" encoding="UTF-8"?>
    <faces-config>
    <application>
    <variable-resolver>ch.hasselba.xpages.demo.ELErrVariableResolver
    </variable-resolver>
    <property-resolver>ch.hasselba.xpages.demo.ELErrPropertyResolver
    </property-resolver>
    </application>
    </faces-config>
  • 在CC上添加一个xp:messages组件以显示消息(或更改类中的错误例程以添加所需的任何内容。)

  • 关于error-handling - 如何在XPages中的自定义控件中处理设计错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14409201/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com