custom tag从servlet获取null值并捕获异常

时间:2012-01-17 21:04:13

标签: java jsp jstl

我编写了自定义标记,可以轻松地本地化字符串;

在jsp中看起来像这样:

 <ct:word key="${message}"/>
从servlet传递的

消息。 此标记从ResourceBundle获取所需的字符串。 一切正常但有问题。如果我没有从servlet传递消息,那么我的应用程序抛出异常(ResourceBundle找不到必要的字符串) 如何确保自定义标记不响应null并跳过?像它一样

<c:out />  

代码我的自定义代码:

private String key;
private String value;

public void setKey(String key) {
    this.key = key;
}

public String getKey() {
    return this.key;
}

public int doStartTag() {
    try {
        this.checkLocale();//check locale and init resourceBundle
        value = resourceBundle.getString(key);
        pageContext.getOut().write(value);
    } catch (IOException e) {
        logger.error(e);
    } catch (MyException e1) {
        logger.error(e1);
    }
    return SKIP_BODY;
}

我不想使用

<c:if test="${not empty message}"/> or <c:when/>

它使jsp上的代码混乱

已更新:  我试试

    } catch (MyException e1) {
        logger.error(e1);
        return SKIP_BODY;
    }

但我有例外:

java.util.MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle, key 

在我的方法中我抓住了

    catch (MissingResourceException e) {
        throw new MyException(Constants.ERROR_TRANSLATE_TAG,e);
    }

我的应用程序仅在我没有从servlet传递此消息时才会发出此异常。我想显示页面,即使我没有此消息,也没有错误页面。

1 个答案:

答案 0 :(得分:0)

记录:

如果无法找到密钥,

resourceBundle.getString(key);将抛出MissingResourceException,因此也会在doStartTag()方法中捕获该异常。