我编写了自定义标记,可以轻松地本地化字符串;
在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传递此消息时才会发出此异常。我想显示页面,即使我没有此消息,也没有错误页面。
答案 0 :(得分:0)
记录:
如果无法找到密钥, resourceBundle.getString(key);
将抛出MissingResourceException
,因此也会在doStartTag()
方法中捕获该异常。