文字列のローカライズを容易にするカスタムタグを作成しました。カスタムタグはサーブレットからnull値を受け取り、例外をキャッチします
は、JSPで、それは次のようになります。
<ct:word key="${message}"/>
メッセージがサーブレットから渡されました。 このタグは、ResourceBundleから必要な文字列を取ります。 すべて動作しますが、問題があります。私はサーブレットからメッセージを渡さなかった場合、私のアプリは例外をスローします(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;
}
を私はそれがを更新したJSP
上のコードクラッタだ
<c:if test="${not empty message}"/> or <c:when/>
を使用したくありません:試しました
} 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);
}
私のアプリの問題をキャッチ。私はエラーページなしでこのメッセージを持っていなくても、ページを表示したい。レコードの
あなたは 'MissingResourceException'をキャッチしようとしましたか? – Thomas
はい、すべての例外をプルするのを避けるために、私はtry/catchブロックでMyExceptionを投げます。この例外を処理する方法はわかりませんが、このエラーをログに書き込むだけです。 – Ifozest
あなたは 'SKIP_BODY'を返すので、' MissinResourceException'がスローされたときに 'pageContext.getOut()。write(value);'行に入るべきではないので、すべてがうまくいくはずです。または、サーブレットでキーを設定する必要がある場合は例外が発生しますか?その場合、あなたのタグの説明を表示できますか? – Thomas