前段時間做項目的時候遇到了一個奇怪的問題,在使用 <bean:write>標籤時當輸出的對象是Integer類型的話就會拋異常:
javax.servlet.jsp.JspException: Cannot find message resources under key org.apache.struts.action.MESSAGE
at org.apache.struts.taglib.TagUtils.retrieveMessageResources(TagUtils.java:1252)
at org.apache.struts.taglib.TagUtils.message(TagUtils.java:1101)
at org.apache.struts.taglib.TagUtils.message(TagUtils.java:1076)
at org.apache.struts.taglib.bean.WriteTag.retrieveFormatString(WriteTag.java:254)
at org.apache.struts.taglib.bean.WriteTag.formatValue(WriteTag.java:317)
at org.apache.struts.taglib.bean.WriteTag.doStartTag(WriteTag.java:232)
at org.apache.jsp.client$jsp._jspService(client$jsp.java:379)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:201)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:381)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:473)
奇怪了,<bean:write>標籤是很常用的,之前我也用<bean:write>標籤輸出過Integer對象,但都沒什麼問題列,<bean:write>標籤在輸出的時候應該會自動調用對象的toString()方法吧。於是我在網上搜索了一下,也有不少朋友遇到了這樣的問題,有一種做法是利用<bean:write>標籤的format屬性,設置format="#"
bean:write name="testForm" property="testBig" format="#" /BigDecimal型數據處理
bean:write name="testForm" property="testInt" format="#" /Intger型數據處理
bean:write name="testForm" property="testDate" format="yyyy-MM-dd hh:mm:ss" /Date型數據處理
這樣確實可以解決問題,但是就有點不爽了。用<bean:write>標籤輸出Integer對象是常有的事,如果總要定義它的format屬性就有點麻煩了,而且以前怎麼不用這樣列?
於是繼續找答案,後來又找到一個解決辦法,說是strtus-config.xml的問題,裏面沒有配置<message-resources parameter=" "/>或者是配置有問題,結果我看了一下,果然我的strtus-config.xml裏面沒有配<message-resources parameter=" "/>於是加了一個,結果還真的把問題解決了。
我也不知道爲什麼上面的兩個方法能夠決絕這個問題,也沒有在網上找到原因,反正後來也遇到過2次<bean:write>標籤時不能顯示Integer的問題,也都是這樣解決的。有一次我在strtus-config.xml裏面配了<message-resources parameter=" " key=" "/>但還是出現了不能顯示Integer的問題,後來我把key=" "刪了就好了。
真不知道<bean:write>標籤爲什麼會受<message-resources parameter=" "/>的影響,如果有知道的朋友請解釋一下,先謝謝了!