2012-01-17 22 views
0

文字列のローカライズを容易にするカスタムタグを作成しました。カスタムタグはサーブレットから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); 
    } 

私のアプリの問題をキャッチ。私はエラーページなしでこのメッセージを持っていなくても、ページを表示したい。レコードの

+0

あなたは 'MissingResourceException'をキャッチしようとしましたか? – Thomas

+0

はい、すべての例外をプルするのを避けるために、私はtry/catchブロックでMyExceptionを投げます。この例外を処理する方法はわかりませんが、このエラーをログに書き込むだけです。 – Ifozest

+0

あなたは 'SKIP_BODY'を返すので、' MissinResourceException'がスローされたときに 'pageContext.getOut()。write(value);'行に入るべきではないので、すべてがうまくいくはずです。または、サーブレットでキーを設定する必要がある場合は例外が発生しますか?その場合、あなたのタグの説明を表示できますか? – Thomas

答えて

0

:鍵が見つからない場合

resourceBundle.getString(key);は、このようにdoStartTag()方法で、同様にその例外をキャッチし、MissingResourceExceptionがスローされます。

関連する問題