1. 程式人生 > >FreeMarker template error

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