【问题标题】:custom tag takes null value from servlet and catch exception自定义标签从 servlet 获取空值并捕获异常
【发布时间】:2012-02-12 16:12:24
【问题描述】:

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

在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 传递此消息时,我的应用程序才会发出此异常。即使我没有此消息,我也想显示页面,没有错误页面。

【问题讨论】:

  • 你试过抓MissingResourceException吗?
  • 是的,为了避免拉出所有异常,我在 try/catch 块中抛出 MyException。虽然我不知道如何处理这个异常,但我只是在日志中写了这个错误。
  • 好吧,既然你返回SKIP_BODY 并且在抛出MissinResourceException 时不应该到达pageContext.getOut().write(value); 行,一切都应该没问题。或者当 servlet 应该设置密钥时,您是否会遇到异常?在那种情况下,你能告诉我们你的标签描述吗?
  • 哦,这是一个愚蠢的错误,我需要在 doStartTag() 中再次为resourceBundle.getString(key); 捕获 MissingResourceException。感谢@Thomas 的帮助。这个话题可以关闭了。
  • 我会为可能找到该问题的其他人添加答案。

标签: java jsp jstl


【解决方案1】:

记录在案:

如果找不到密钥,resourceBundle.getString(key); 将抛出 MissingResourceException,因此在 doStartTag() 方法中也捕获该异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-14
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多