【发布时间】: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 的帮助。这个话题可以关闭了。 -
我会为可能找到该问题的其他人添加答案。