FreeMarker template error
今天直接連結到jsp就報這個錯,但經過action再到jsp就沒了。
網上看看基本有兩種原因:
一:
這種問題的引起往往是你在action中使用了addActionError這樣的方法在彙報actionerror,而你在呼叫addActionError方法時傳入了null值,這時候機會導致這樣的問題發生,所以如果發生這樣的情況請檢查你的程式碼,看看是否因為某種問題導致給addActionError方法傳入了null值,找到了解決這個問題就可以了。
二:
struts2中的標籤漏了必要的屬性。例如:
用struts2中的checkBoxList標籤時沒有給標籤加name屬性,加上name屬性後,問題消失。
我的原因:
三:
<s:form>標籤中的namespace屬性!
先說一個action配置檔案裡的namespace,看下例
<package name="user" namespace="/user" extends="struts-default">
<action name="logon" class="cn.net.cipe.ots.user.actions.UserAction" method="logon">
<result name="success">/JSP/main.jsp</result>
<result name="input">/JSP/login.jsp</result>
<result name="error">/JSP/login.jsp</result>
</action>
</package>
那麼如果在jsp裡這樣三種寫法:
第一種
<form action="logon.action" >
.....
</form>
第二種
<form action="/user/logon.action" >
.....
</form>
第三種
<s:form action="logon.action" namespace="/user" >
.....
</s:form>
第一種寫法可以通過測試,原因是FilterDispatcher會去package的根目錄及下面的子目錄去搜logon這個action
第二種寫法是正規寫法,可以通過測試,因為FilterDispatcher把form的跳轉分解為logon.action和nanespace=/user,然後在package下直接命中namespace為"/user"的那個包。
第三種寫法,很不幸,不能通過測試,原因是s:form這個標籤居然不會在生成html頁面時候把namespace的值給加到form 的action屬性裡面去。。。。。
那麼與第三種情況正相反,如果你用s:url的話,一定要寫namespace,見下例:
<s:url href="/user/logon.action"/>這種寫法極容易出錯,原因是不寫namespace的話,產生html程式碼時候很混亂
<s:url href="logon.action" namespace="/user"/>正確寫法!
不知道<s:form>標籤不支援namespcce的寫法是否是一個bug,stusts2的版本是2.1.8.1