2010-03-12 47 views
2

您好的怪異輸出I具有低於僞代碼與拋出這樣的Throwable的getMessage()

throw new MyException("Bad thing happened","com.stuff.errorCode"); 

其中MyException延伸Exception類的異常。下面是我怎麼了處理異常

ActionMessages errors = new ActionMessages(); 
if(ex.getErrorCode() != null && !"".equals(ex.getErrorCode())) 
error = new ActionMessage(ex.getErrorCode()); // com.stuff.errorCode is the errorCode 
else 
error = new ActionMessage(ex.getMessage()); //"Bad thing happened" is error message 
errors.add(ActionMessages.GLOBAL_MESSAGE, error); 
//errors.add(Globals.MESSAGE_KEY, error); 
saveErrors(requ, errors); 
return (mapping.findForward(nextScreen)); 

現在顯示爲

??? en_US.Bad的事情發生了消息的用戶屏幕上???

我正在使用Struts 1.2.4,我正在研究它的源代碼,但任何指針都將不勝感激。

回答

1

爲了避免ActionMessage試圖解釋你的文字消息作爲密鑰使用this constructor

error = new ActionMessage(ex.getMessage(), false); 

boolean參數指定如果String參數將被解釋爲代碼進行查找(true)或作爲文字信息(false)。

+0

假設默認情況下它是錯誤的,它應該適用於error = new ActionMessage(ex.getErrorCode()),我在ApplicationResources.properties中爲此錯誤代碼設置了正確的消息? – 2010-03-12 14:40:43

0

Java正在尋找應用程序資源來包含錯誤消息的本地化版本。

這就是什麼??? en_US ???事情是關於。出於某種原因,它認爲你引用了一個關鍵字「發生了壞事」,並且正在尋找一個本地化(即已翻譯)的消息。

爲什麼?

還不確定。你能發佈整個MyException課嗎?

2

編輯:這個答案是在問題發生重大變化之前編寫的。

「??? en_US」的東西必須來自其他地方(可能是用於打印消息的Web框架),因爲Exception本身不會執行任何查找。

編譯此代碼:

public class MyException extends Exception { 
    public MyException(String msg, String sErrorCode) { 
    super(msg); 
    // ignore sErrorCode 
    } 
} 

public class MyExceptionTest { 
    public static void main(String[] args) { 
    System.out.println(new MyException("foo", "bar").getMessage()); 
    } 
} 

和運行MyExceptionTest,你會看到一個簡單的「富」作爲輸出(因爲它的預期)。

+0

+1 - 這是IMO最可能的解釋。 – 2010-03-12 12:51:35

+0

是的,是的,我早點得到了錯誤的流程。我修改了正確的細節問題。 – 2010-03-12 13:07:54