0
我编写了自定义标记,可以很容易地本地化字符串;自定义标记从servlet中获取空值并捕获异常
在jsp中它看起来像这样:
<ct:word key="${message}"/>
消息从Servlet进行传递。 该标签从ResourceBundle中获取所需的字符串。 一切正常,但存在问题。如果我没有从servlet传递消息,那么我的应用程序抛出异常(ResourceBundle找不到必要的字符串)。
如何确保自定义标签不响应空值并跳过?像它
<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'? – Thomas 2012-01-17 21:06:11
是的,为了避免拉出所有异常,我在try/catch块中抛出MyException。虽然我不知道如何处理这个异常,但我只是写下这个错误。 – Ifozest 2012-01-17 21:10:38
既然你返回'SKIP_BODY'并且不应该进入'pageContext.getOut()。write(value);'当抛出一个'MissinResourceException'的行时,一切都应该没问题。或者当应该由servlet设置密钥时,你会得到一个异常吗?在这种情况下,你能告诉我们你的标签描述吗? – Thomas 2012-01-17 21:41:12